3

我在加载页面时调用此函数:

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 上的页面卸载?

4

1 回答 1

0

某些浏览器在卸载页面时会忽略对话框提示。这是意料之中的。

您可能遇到了WebKit 问题 #193508

于 2019-06-17T10:30:38.993 回答