如何在用户真正关闭标签时才运行Javascript代码?

问题描述 投票:0回答:2

我想在用户关闭页面时运行一些JS代码。我在网上找到了这个。

window.addEventListener('beforeunload', (event) => {
      event.returnValue = null
      console.log("unload")
    });

当我试图用我的文档中的这段代码关闭我的页面时,Chrome会给我一个对话框,并询问 "离开网站?你所做的更改可能不会被保存",并有 "离开 "和 "取消 "两个选项。它还运行了 console.log,所以似乎很好用吧?然而, console.log 在提示出现的同时运行。所以我不知道用户是否真的关闭了网站,因为据我所知,他们可能已经点击了取消。而我只想在我知道用户确实关闭了页面的情况下运行我的代码。

如果可能的话,我真的希望避免使用WebSockets,或者做一些连续的轮询来检查用户是否还在页面上。但是,如果真的没有其他方法,我可能会采用这些方法中的一种,但我真的希望有其他方法可以做到这一点。

有什么好办法吗?

EDIT: 其实我并不关心是什么触发了 beforeunload 事件。比如,用户可能会点击浏览器中的关闭按钮,可能会刷新页面,可能会点击一个链接,也可能会在浏览器中输入另一个网址。我不在乎。我只是不想让他们在出现的提示中点击取消时运行我的代码,因为那样的话,他们毕竟不会真正卸载页面。另外,我并没有做任何侵入性的事情,只是在幕后做了一些数据库的事情,所以如果代码在页面关闭后以某种方式运行是没有问题的(我想我记得有一些关于 sendBeacon 或其他东西能够做到,但我不确定),或者完全不出现提示也可以,它只是运行我的代码,然后关闭页面。

javascript javascript-events addeventlistener onbeforeunload
2个回答
1
投票

顾名思义,这个事件发生在 之前 页面被卸载,并允许用户取消卸载。

使用一个 unload 事件监听器来检测页面何时真正被卸载。如果你有两个事件监听器,只有当用户选择了 Leave.


1
投票

没有直接的方法来检测浏览器是否关闭,但是你可以检查标签是否关闭。onunload & onbeforeunload 这些活动。

欲了解更多信息。检测浏览器或标签页关闭浏览器关闭时的.net核心cookies认证

在您的情况下,您可以使用 $(window).off('beforeunload');

更多信息。http:/forums.mozillazine.orgviewtopic.php?f=38&t=2083577。

© www.soinside.com 2019 - 2024. All rights reserved.