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

IT技术 javascript events
2021-02-08 09:34:06

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

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

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

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

3个回答

不,如果有,它将依赖于浏览器。当用户关闭页面时,您尝试运行什么样的代码?是要注销用户吗?然后,如果浏览器崩溃或网络连接中断,用户将不会被注销(如果计算机进入睡眠/休眠模式,则可能不会)。

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

更新:在 stackoverflow 上找到了这个答案

是的,有一个解决方案!

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

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

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

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

为什么这么多反对票?这是一个完全可行的解决方案!@deceze 用鼠标点击关闭按钮只会触发 onbeforeunload 事件,上面的答案并不矛盾。检查上述按键按下以检测页面重新加载的 if 语句和处理“用鼠标”关闭窗口的 else 语句应该对您有用。
2021-03-27 09:34:06
@jahackbeth 问题是是否可以在后退按钮、重新加载或窗口关闭之间区分“pageunloads”。如果操作是通过键盘触发的,则可以这样做,是的。我的批评是,如果操作是通过 GUI 触发的,那是不可能的,我认为很多时候都是这样。
2021-04-01 09:34:06
鼠标单击关闭按钮时根本不起作用
2021-04-03 09:34:06
@deceze 啊,正确!我没有注意到您的意思是说浏览器的关闭和重新加载按钮的鼠标事件通过 javascript 无法区分。
2021-04-04 09:34:06