有没有办法在javascript中检测卸载事件是通过刷新,后退按钮还是关闭浏览器引起的?

时间:2008-11-14 21:48:30

标签: javascript events

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

  • 页面刷新
  • 后退按钮(或离开页面)
  • 关闭浏览器

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

目的:当客户更新我们的软件时,更新会将他们的第一个互联网请求重定向到优惠页面。有一个“不要打扰”选项的按钮,但有些用户只需关闭他们的浏览器。关闭浏览器后,我需要复制“请勿打扰”功能,以便用户不再被重定向到优惠页面。由于离开页面的方式不同,简单地附加到“卸载”事件将不起作用。

3 个答案:

答案 0 :(得分:14)

不,如果有,那将取决于浏览器。 当用户关闭页面时,您尝试运行哪种代码? 是注销用户吗? 如果浏览器崩溃或网络连接断开,用户将无法注销(如果计算机进入睡眠/休眠模式,则可能不会注销)。

如果是出于注销目的,您应该在服务器上使用时间戳变量,该变量随每个请求更新(或使用ajax-ping),如果在指定时间内没有看到用户,则注销用户

更新:在stackoverflow找到this answer

答案 1 :(得分:2)

是的,有一个解决方案!

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

答案 2 :(得分:-4)

我使用键盘“嗅探”的方法,因为它寻找keydown的“F5”,“ctrl + r”,“alt-f4”,“退格”等等,如果它发现它们流过键盘事件队列,它适当地设置布尔变量以捕获该状态...然后我使用“onbeforeunload”函数处理程序,它测试那些布尔状态变量来决定做什么。

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

这个东西不适合胆小的人,但它肯定可以通过一些持久性和大量的跨浏览器测试来实现!