Safari:onbeforeunload

时间:2016-12-02 18:24:12

标签: javascript jquery html css safari

前提条件:您应该使用 Safari 10

嗨,我很难得到离开|保持确认框以在不同浏览器上显示在我的页面上。

请转到https://www.biznessapps.com/cms,然后使用以下凭据登录:

username: pzheng64@gmail.com
password: skl@0!_~!(

登录后,转到/欢迎页面。请单击左侧边栏中的“设置”,然后转到“成员资格”选项卡。

如果您可以看到“启用会员功能”,则单击它并更改其中的任何内容并导航到另一个页面。您将在第一次尝试离开页面时看到确认框出现。 onbeforeunload confirmbox

点击“离开”转到目标页面,然后返回此“设置”页面并尝试相同的操作;您将不会再次看到确认框(使用Safari时)。

我在https://www.biznessapps.com/cms/v2/public/scripts/pages/settings.js?v=68.160720

使用了此代码段
/* settingsPages.isChanged() is my custom function */
window.addEventListener("beforeunload", function(event) {
    if (settingsPage.isChanged()) {
        event.returnValue = "some string";
        return "some string";
    }
});

它适用于Google Chrome和Firefox,但不适用于Safari。

谢谢!

1 个答案:

答案 0 :(得分:2)

这可能是由于Safari的后向缓存造成的。关于此的一篇不错的文章可以在这里找到: https://team.goodeggs.com/you-forgot-about-bfcache-f7a9bdeceb6c#.qgri9etsb

修复程序基本上只是在从缓存加载页面时重新加载页面,如下所示:

window.onpageshow = function(event) {
    if (event.persisted) {
        window.location.reload() 
    }
};

event.persisted是神奇的部分。如果使用浏览器“后退”或“前进”加载页面,则为true