javascript - Safari:onbeforeunload

标签 javascript jquery html css safari

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

嗨,我很难请假 |保持确认框在不同浏览器上显示在我的页面上。

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

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

登录后,转到/welcome 页面。请点击左侧边栏中的设置,然后转到成员(member)选项卡。

如果您可以看到“启用成员(member)功能”,则单击它并更改那里的任何内容并导航到另一个页面。第一次尝试离开页面时,您会看到确认框出现。 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 上运行不佳。

谢谢!

最佳答案

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

解决办法是基本上只重新加载页面,如果它是从缓存中加载的,就像这样:

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

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

关于javascript - Safari:onbeforeunload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40938707/

相关文章:

javascript - 替换内容同时忽略链接和 html 标签

javascript - 为什么我无法枚举定义为不可枚举的对象属性?

javascript - 带有 document.ready() 监听器的动态脚本不使用 ajax 调用执行

jquery - 如何使用标签设置多个附加复选框的样式

javascript - jQuery UI Slider - 禁止点击 slider 轨道

jquery - Flash 播放器位于 div 之外(仅在 IE 中)

html - CSS3 图标 : inserted content isn't placed consistently

javascript - 如何从 firestore 获取数据并在其中获取另一个数据(通过引用)

html - 访问 Requestandler 外部的变量

html - 在 weebly 中添加 mathjax