navigator.sendBeacon未从卸载中调用



根据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>

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

它旨在与可见性更改结合使用事件(但不包括卸载和加载前事件(

当可见性更改转换为隐藏时,您可以将其视为选项卡/浏览器关闭时,然后使用sendBeacon。

MDN的示例代码:

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

最新更新