我正在开发一个与其他网站有多个链接的网站。我想要的是发送一个ajax调用来报告当用户点击并离开页面时用户正在离开。我点击链接时发出警报,但是由于某种原因控制器永远不会得到ping。
如何实现它将获得任何帮助。
答案 0 :(得分:2)
无法完成。
当你去导航时,只有一个事件可以捕捉到onbeforeunload
事件,而且它的功能非常有限。
更不用说还有其他方法可以离开页面而不会离开:
你唯一能做的就是设置一个heartbeat
类的东西,每隔几毫秒就会对服务器进行ping操作,然后说“我活着”。
根据您的目的,通常会有更好的选择。
答案 1 :(得分:1)
您可以尝试简单地设置click
事件处理程序,它将在导航之前检查每个链接的href
属性。如果它转到另一个网站,处理程序发送AJAX请求,然后(在服务器响应之后)重定向到页面。
var redirect = '';
$('a').click(function() {
if (this.href.host != document.location.host) {
if (redirect) return false; // means redirect is about to start, clicking other links has no effect
redirect = this.href;
$.ajax({
url: '/away',
success: function(){document.location.href = redirect;}
});
return false;
});
但是,如果用户在多个标签页中打开了您的页面,它就无法正常工作。
答案 2 :(得分:0)
您可以尝试:
$(window).on('beforeunload', function(){
return "This should create a pop-up";
});
答案 3 :(得分:0)
您可以通过捕获页面上所有链接(或所有相关链接)上的点击来实现它,然后在其上调用ev.preventDefault()
以防止浏览器直接导航到该页面。
相反,您可以对服务器进行AJAX调用,当该调用返回时,您可以将window.location
设置为用户尝试导航到的URL。
答案 4 :(得分:0)
这是您可以尝试的解决方法。
在加载页面时,使用jquery将所有href属性移动到tempHref属性。然后,附加一个方法来捕获click事件。
这样,点击链接就不会自动移动到预定目的地。 单击发生时,只需执行ajax调用,然后使用javascript,移动到另一页。
$('a').each(function () {
var link = $(this);
link.attr('tempHref', link.attr('href'));
link.removeAttr('href');
});
$(document).on('click', 'a', function ()
{
//perform ajax call;
location.href = $(location).attr('tempHref');
});
答案 5 :(得分:0)
目前唯一可靠的方法是挂钩(即添加事件侦听器)您的代码在 {{1} 上的 sendBeacon 中使用所谓的 Beacon API 方法} 事件(即当用户尝试离开页面时)。
beforeunload
方法通过 HTTP 向网络服务器异步发送少量数据。它旨在用于将分析数据发送到网络服务器,并避免了用于发送分析的传统技术的一些问题,例如使用 navigator.sendBeacon()
:
XMLHttpRequest