如何仅在用户实际关闭选项卡时才 运行 Javascript 编码?

How do I run Javascript code only if the user actually closes the tab?

我正在尝试在用户关闭我的页面时 运行 一些 JS 代码。我在网上找到这个:

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

当我尝试使用文档中的此代码关闭我的页面时,Chrome 给我一个对话框并询问 "Leave site? Changes that you made may not be saved",选项为 "Leave" 和 "Cancel" .它也是 运行 的 console.log,所以它似乎工作正常吧?但是, console.log 运行 提示同时出现。所以我不知道用户是否真的关闭了网站,因为据我所知他们可能点击了取消。如果我知道用户实际上关闭了页面,我只想 运行 我的代码。

如果可能的话,我真的更愿意避免使用 WebSockets,或者进行某种连续轮询来检查用户是否仍在页面上。但是,如果真的没有别的办法,我可能会求助于其中一种方法,但我真的希望有另一种方法可以做到。

有什么想法吗?

编辑:我实际上并不关心是什么触发了 beforeunload 事件。例如,用户可能会单击浏览器中的关闭按钮,他们可能会刷新页面,他们可能会单击 link,或者他们可能会在浏览器中键入另一个 url。我不在乎。如果他们在出现的提示上单击取消,我只是不想 运行 我的代码,因为那样他们实际上不会卸载页面。另外,我没有做任何侵入性的事情,只是在幕后做一些数据库的事情,所以如果代码在页面关闭后 运行s 就没问题了(我想我记得一些关于 sendBeacon 的事情或者能够做到这一点的东西,但我不确定),或者如果根本没有出现提示也没关系,它只是 运行 我的代码然后关闭页面。

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

使用 unload 事件侦听器来检测页面何时真正被卸载。如果您有两个事件侦听器,则只有在用户选择 Leave 时才会 运行。

没有直接的方法来检测浏览器是否关闭,但是您可以检查选项卡是否关闭。 您可以使用 onunload & onbeforeunload 这些事件。

更多信息: Detect browser or tab closing

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

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