1

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

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

我在 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>
4

1 回答 1

2

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

它旨在与 visibilitychange 事件结合使用(但不能与 unload 和 beforeunload 事件结合使用)

当 visibilitychange 转换为hidden时,您可以将其视为选项卡/浏览器正在关闭时,然后使用 sendBeacon。

来自 MDN 的示例代码:

document.addEventListener('visibilitychange', function logData() {
  if (document.visibilityState === 'hidden') {
    navigator.sendBeacon('/log', analyticsData);
  }
});
于 2021-01-12T16:56:26.647 回答