我想在用户关闭页面时运行一些JS代码。我在网上找到了这个。
window.addEventListener('beforeunload', (event) => {
event.returnValue = null
console.log("unload")
});
当我试图用我的文档中的这段代码关闭我的页面时,Chrome会给我一个对话框,并询问 "离开网站?你所做的更改可能不会被保存",并有 "离开 "和 "取消 "两个选项。它还运行了 console.log
,所以似乎很好用吧?然而, console.log
在提示出现的同时运行。所以我不知道用户是否真的关闭了网站,因为据我所知,他们可能已经点击了取消。而我只想在我知道用户确实关闭了页面的情况下运行我的代码。
如果可能的话,我真的希望避免使用WebSockets,或者做一些连续的轮询来检查用户是否还在页面上。但是,如果真的没有其他方法,我可能会采用这些方法中的一种,但我真的希望有其他方法可以做到这一点。
有什么好办法吗?
EDIT: 其实我并不关心是什么触发了 beforeunload
事件。比如,用户可能会点击浏览器中的关闭按钮,可能会刷新页面,可能会点击一个链接,也可能会在浏览器中输入另一个网址。我不在乎。我只是不想让他们在出现的提示中点击取消时运行我的代码,因为那样的话,他们毕竟不会真正卸载页面。另外,我并没有做任何侵入性的事情,只是在幕后做了一些数据库的事情,所以如果代码在页面关闭后以某种方式运行是没有问题的(我想我记得有一些关于 sendBeacon
或其他东西能够做到,但我不确定),或者完全不出现提示也可以,它只是运行我的代码,然后关闭页面。
顾名思义,这个事件发生在 之前 页面被卸载,并允许用户取消卸载。
使用一个 unload
事件监听器来检测页面何时真正被卸载。如果你有两个事件监听器,只有当用户选择了 Leave
.
没有直接的方法来检测浏览器是否关闭,但是你可以检查标签是否关闭。onunload & onbeforeunload
这些活动。
欲了解更多信息。检测浏览器或标签页关闭浏览器关闭时的.net核心cookies认证
在您的情况下,您可以使用 $(window).off('beforeunload');
更多信息。http:/forums.mozillazine.orgviewtopic.php?f=38&t=2083577。