Safari:onbeforeunload

Pau*_* Z. 7 html javascript css safari jquery

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

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

请访问https://www.biznessapps.com/cms,并使用以下凭据登录:

username: pzheng64@gmail.com
password: skl@0!_~!(
Run Code Online (Sandbox Code Playgroud)

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

如果您可以看到"启用会员功能",则单击它并更改其中的任何内容并导航到另一个页面.您将在第一次尝试离开页面时看到确认框出现. 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";
    }
});
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

min*_*nce 3

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

修复方法基本上是重新加载页面(如果是从缓存加载的),如下所示:

window.onpageshow = function(event) {
    if (event.persisted) {
        window.location.reload() 
    }
};
Run Code Online (Sandbox Code Playgroud)

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