我在加载页面时调用此函数:
function setBeacon() {
if (!navigator.sendBeacon) {
alert("No navigator beacon available. This is a critical bug which must be fixed.");
}
else
{
if ('beforeunload' in window) {
$(window).on('beforeunload', function() {
generateFormSendBeacon();
return undefined;
});
} else if ('onpagehide' in window) {
alert("on page hide");
window.addEventListener("pagehide", function() {
generateFormSendBeacon();
return undefined;
});
} else {
alert("Neither beforeunload or onpagehide events are available. Please report this to John, with details about your browser.");
}
}
这在桌面上完美运行。我在 generateFormSendBeacon() 函数中使用 navigator.sendBeacon。它正确发送它(我的服务器中有一个断点接收它)。然而,在移动设备上,在 safari 和 chrome 中,“beforeunload”事件不存在。但根据苹果的说法,我们应该使用 pagehide 来代替。“页面隐藏”警报显示;iOS 确实有权访问此事件。但是,该事件从未被触发,因为我从未到达服务器中的断点。再次; 在桌面上测试相同的代码路径,它工作正常。如何检测 iOS 上的页面卸载?