如何检测用户何时离开您的网站(不包括重新加载)



每当用户通过关闭浏览器、关闭选项卡或切换到新网站离开我的网站时,我都想触发ajax调用。但是,我想排除重新加载。我在Atack Overflow上看到过这样的解决方案:

window.onbeforeunload = function(){
  // call some ajax call
};

然而,这个解决方案也会在重新加载时触发,这是我不想要的。

简短的回答:你做不到,但你可以接近目标。

让你的服务器"保持"AJAX调用几秒钟,并在你的身体顶部添加一个JS片段,该片段会发出另一个AJAX请求,上面写着"我访问了这个页面"

如果同一个cookie/会话在离开后几秒钟内调用"我访问了这个页面",那么你知道用户可能已经重新加载了。

这不是万无一失的,但它可能适合你的需求。

您根本无法保证以关闭浏览器窗口的方式成功发送ajax调用。您可以尝试,有时可能会成功,但最好找到一个更好的设计,不依赖于那种类型的ajax调用。

此外,给定的浏览器窗口不知道何时发生重新加载,以及用户何时刚刚导航到新页面。旧页面和新页面是完全不同的Javascript上下文,它们彼此一无所知。

一种可能的机制主要可以在服务器端实现,并涉及webSockets每次加载时,您的页面都会与服务器建立webSocket连接。每当页面关闭时,webSocket连接也将关闭。

服务器可以监视webSocket关闭,以查看每次关闭页面的情况。如果服务器在每次webSocket关闭时设置一个短计时器,并且每个页面都有一个标识用户的cookie,那么服务器可以在几秒钟内查看webSocket连接是否重新建立。如果它被重新建立,那么用户只是在重新加载。如果在短时间内没有重新建立,则用户已经关闭或导航离开。

使用此机制,服务器可以准确地监视用户何时开始查看页面以及何时关闭页面。而且,如果关闭和再次打开之间的间隔很短,则本质上是重新加载(可以忽略)。因此,使用这种机制,您可以跟踪所有客户端对网页的查看情况。

最新更新