Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测用户何时离开网站_Javascript_Html_Http - Fatal编程技术网

Javascript 检测用户何时离开网站

Javascript 检测用户何时离开网站,javascript,html,http,Javascript,Html,Http,我正在尝试创建我自己的网站访问库(为了好玩),比如谷歌分析(Google Analytics),在这里我可以检测用户何时访问我的网站,他们查看什么页面等 有没有办法确定用户何时离开页面和/或永久离开网站 我已经成功地(用python)编写了检测用户何时第一次访问我的站点(使用cookie)的代码&如何确定他们查看的页面但我不知道如何检测用户何时永久离开网站? javascript中是否有一种方法(也许我可以检测页面/url何时发生变化?)。我知道在HTTP中有一个referer头,它告诉我用户来

我正在尝试创建我自己的网站访问库(为了好玩),比如谷歌分析(Google Analytics),在这里我可以检测用户何时访问我的网站,他们查看什么页面等

有没有办法确定用户何时离开页面和/或永久离开网站

我已经成功地(用python)编写了检测用户何时第一次访问我的站点(使用cookie)的代码&如何确定他们查看的页面但我不知道如何检测用户何时永久离开网站?


javascript中是否有一种方法(也许我可以检测页面/url何时发生变化?)。我知道在HTTP中有一个referer头,它告诉我用户来自哪里,也许当用户移动到另一个网站(我的网站之外)时,我会收到通知(因为我将是该HTTP请求中的referer)?我说的对吗?

有一个卸载事件可以用JavaScript处理。例如:

window.onunload = unloadPage;

function unloadPage()
{
 alert("unload event detected!");
}
不幸的是,当用户离开当前页面时,没有办法知道用户实际要去哪里(与进入页面时的推荐人不同)


一个想法是,在卸载处理程序中设置一个变量(可能在数据库中)(通过AJAX调用或其他方式),然后在用户随后进入另一个页面时将其删除。无论哪个记录未被删除(或停用-软删除),都是用户实际跳出网站或关闭浏览器之前的最后一次退出事件。

您可以绑定到window.beforeunload或window.unload


但是,这两种方法都不是很可靠。

使用jquery可以触发:

$(window).bind('beforeunload', function() {
    // ajax call perhaps
    // triggering a write to db or filesystem...
});
纯javascript方式:

<html>
<head>
<script>
function closeIt()
{
  return "Any string value here forces a dialog box to \n" + 
         "appear before closing the window.";
}
window.onbeforeunload = closeIt;
</script>
</head>
<body>
  <a href="http://www.somewhere.com">Click here to navigate to 
      www.somewhere.com</a>
</body>
</html>

函数closeIt()
{
return“此处的任何字符串值都会强制对话框\n”+
“在关闭窗口之前显示。”;
}
window.onbeforeunload=关闭它;

您可以将站点上的所有链接标记为内部链接或外部链接。它们必须指向您的站点,然后重定向到用户选择的位置。在重定向之前,您可以将该用户指向远离站点的位置

但是


我最好在你网站的每一页上都放一个小脚本(比如说每20-30秒一个脚本),向你网站上的特定url发出GET请求。因此,您可以跟踪每个用户请求的数量。

只要用户按照您期望的规则进行操作,onbeforeunload就会起作用。这意味着关闭选项卡、关闭窗口或导航到另一个站点。
但是,您无法使用javascript可靠地检测到这一点,onbeforeunload在许多情况下都不会启动,例如关闭浏览器(ctrl+q)、浏览器崩溃、历史记录(back)和opera,并且一些chrome版本对onbeforeunload的支持有限

如果希望以高精度检测它,则必须定期发送Ajax请求,以显示用户“仍然活着”。在数据库或文件中注册这些请求,并按时间顺序进行分析

因此,如果您每20秒“ping”一次数据库,您可以通过非常简单的查询知道浏览器在短时间内没有“ping”,并确定用户已不在站点中。

只是一个简短的警告,我刚刚与一个客户讨论了这一点。它可以工作……但是……它限制了您仅在实践中使用警报对话框。我试图获得一个UI对话框模式来进行快速退出调查(客户的选择,而不是我的),结果我得到了两个选项:要么返回false,让它按预期显示对话框,但显示一个显示“false”的警报,要么返回true,让它跳过该模式。因此,如果你想做的不仅仅是一个警报箱,那么要准备好一次次地把头撞到墙上。这可不太好看。记录在案:是的,确认使用Chrome。。我在这里发现,如果你让你的回调返回一个空值,那么警报不会弹出。给这个答案一个在2011年包含纯JS方式的投票