我尝试了基于大量示例的解决方案,只有在首先点击其他内容时,该事件才有效。首先右键单击同一页面上的链接。然后,如果我单击浏览器关闭按钮,它会在按预期关闭之前提示警告。
否则,如果我首先转到页面或刷新它并单击关闭按钮,它将无法正常工作并关闭页面。 onbeforeunload
函数内的代码每次都会命中,但在最后一种情况下显然没有效果。
$("button, a").bind("click", function () {
window.onbeforeunload = null;
});
window.onbeforeunload = function (e) {
e = e || window.event;
// For IE and Firefox prior to version 4
if (e) {
e.returnValue = 'Sure?';
}
// For Safari
return 'Sure?'; // the code hits each time - normally it does have no effect but if right-clicked a link on the page first it does work?
};
这看起来是一种非常奇怪的行为。任何人都知道为什么只有在页面上发生了另一个事件时才有效?
在Firefox&铬。
答案 0 :(得分:1)
这是一个功能。 According to MDN:
为了防止不需要的弹出窗口,某些浏览器不显示在beforeunload事件处理程序中创建的提示,除非该页面已与之交互;有些人根本不显示它们。
即使没有用户交互,您还需要显示onbeforeunload弹出窗口的用例是什么?例如,这些通常用于防止未提交表单上的数据丢失。如果用户想要离开页面并且没有任何理由显示弹出窗口,则不应尝试这样做。