有没有在JavaScript的方式来检测是否通过刷新,后退button或closures浏览器导致卸载事件?

我目前正在查看一个窗口的“卸载”事件,试图确定“卸载”事件是如何触发的,但是收效甚微。 有没有办法确定如何触发javascript事件?

  • 页面刷新
  • 后退button(或离开页面)
  • closures浏览器

本质上,我只需要在浏览器窗口closures时执行一些代码,而不是刷新或导航。

目的:当客户更新我们的软件时,更新将把他们的第一个互联网请求redirect到商品页面。 有一个“不要打扰”选项的button,但一些用户将简单地closures他们的浏览器。 closures浏览器后,我需要复制“不要打扰”function,以便用户不再被redirect到商品页面。 只需附加到“卸载”事件将不会工作,由于不同的方式离开一个页面。

不,如果有,它会依赖于浏览器。 你想在用户closures页面时运行什么样的代码? 是注销用户吗? 然后,如果浏览器崩溃或networking连接中断,则用户不会被注销(如果计算机进入睡眠/hibernate模式,则可能不会)。

如果是用于注销的目的,你可能应该在服务器上使用一个timestampvariables,每个请求都会被更新(或者使用ajax-ping),如果用户没有在指定的时间内看到它,则注销它。

更新:在这里find这个答案在stackoverflow。

是的,有一个解决scheme!

我devise了一个基于onBeforeUnload + onLoad事件,HTML5本地存储和客户端/服务器通信的解决scheme。 请参阅https://stackoverflow.com/a/13916847/698168上的详细信息。;

我使用了一个键盘“嗅探”的方法,它查找keydown的“F5”,“CTRL + R”,“ALT-F4”,“退格”等,如果它发现它们stream经键盘事件队列,它设置适当的布尔variables来捕获该状态…然后我使用“onbeforeunload”函数处理程序,它testing这些布尔状态variables来决定做什么。

您甚至可以在键盘处理中使用preventDefault(),bubbles = false和returnValue = falseclosures各种键盘笔画(例如“ctrl + n”或“F1”)。

这个东西并不是因为心灵的模糊,而是在一些持久性和大量的跨浏览器testing的时候确实可行!