Safari:onbeforeunload

8

前提条件:您应该使用Safari 10浏览器。

您好,我在不同的浏览器上都无法让“离开|停留”确认框显示在我的页面上,遇到了麻烦。

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

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

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

如果您能看到“启用会员功能”,则单击它并更改其中任何内容,然后导航到另一个页面。第一次尝试离开该页面时,将会出现确认框。 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上无法正常工作。

谢谢!


你找到解决方案了吗? - Dario Rusignuolo
1
@dario 不,我找不到。这个问题与GAntoine提到的文章从未重复过。 - Paul Z.
我另外开了一个问题,以防万一... http://stackoverflow.com/questions/41014003/onbeforeunload-on-safari-not-displaying-the-confirm-message?noredirect=1#comment69236495_41014003 - Dario Rusignuolo
它在Safari 9上也无法工作。 - Setthase
显示剩余3条评论
1个回答

3
这很可能是由于Safari的“前进后退”缓存所致。这里有一篇不错的文章: https://team.goodeggs.com/you-forgot-about-bfcache-f7a9bdeceb6c#.qgri9etsb 解决方法就是如果页面是从缓存中加载的,就重新加载页面,像这样:
window.onpageshow = function(event) {
    if (event.persisted) {
        window.location.reload() 
    }
};

event.persisted 是重要的部分。如果页面是通过浏览器的“后退”或“前进”功能加载的,则它为 true


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接