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);
}
});
根据 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);
}
});