navigator.sendBeacon 未从卸载中调用

navigator.sendBeacon not called from unload

根据 MDN 和规范,navigator.sendBeacon 旨在从 window 卸载中调用。 现在,如果您关闭浏览器的最后一个选项卡或整个浏览器,它似乎不再起作用 window。

谁能确认这是否是设计使然?如果是这样,是否有在卸载时发送最后一分钟数据的解决方法?

我在 Firefox 74 和 Chrome 81 中使用此示例文件进行了测试,寻找与 Fiddler 的调用。

<html>
<head>
<title>unload test page</title>
<script>
window.addEventListener("unload", function () {
  navigator.sendBeacon('https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon');
});
</script>   
</head>
<body>
    <p><div>unload test page</div></p>
</body>
</html>

MDN 州(截至 2021 年 1 月 12 日):

It’s intended to be used in combination with the visibilitychange event (but not with the unload and beforeunload events)

当 visibilitychange 转换为 hidden 时,您可以将其视为 tab/browser 正在关闭,然后使用 sendBeacon。

来自 MDN 的示例代码:

document.addEventListener('visibilitychange', function logData() {
  if (document.visibilityState === 'hidden') {
    navigator.sendBeacon('/log', analyticsData);
  }
});