用于确认导航离开的正确方法onbeforeunload
是只返回您想要显示的消息的字符串。MDN 有这个说法。
该函数应为 Event 对象的 returnValue 属性分配一个字符串值并返回相同的字符串
因此,您onbeforeunload
要求的行为的功能就是(与将其与 jquery 绑定相同,特别是因为 onbeforeunload 不像其他事件那样支持多个事件侦听器)
window.onbeforeunload = function() {
return "Are you sure?";
};
但具有讽刺意味的是,出于安全考虑,Firefox 不支持此功能。
请注意,在 Firefox 4 及更高版本中,返回的字符串不会显示给用户。请参阅错误 588292。
编辑:我阅读了更多的错误报告。他们做出此决定的主要原因是:“1. 删除站点提供的文本,因为这是一个安全问题(浏览器对话框中的不可信文本)”。我想知道他们对 a 的感觉如何alert
?
大多数现代浏览器(Chome、IE 9+ 或更早版本,以及 Opera,我肯定知道)会忽略您在onbeforeunload
函数中尝试执行的任何操作,而不是返回一个字符串进行显示。这是为了防止劫持用户的浏览器、打开弹出窗口、通过将用户指向另一个可能是恶意的域来覆盖导航尝试等。
编辑2:我显然是不正确的。只有一些事情是不允许的onbeforeunload
,它们只是碰巧主要是您在示例代码中尝试的事情类型,与事件传播和页面导航有关。从该 FF 错误报告的评论中,用户 oyasumi 发布了一个指向此 jsFiddle 的链接,其中包含向 FF 4+ 用户显示自定义文本的解决方法:http: //jsfiddle.net/ecmanaut/hQ3AQ/所以显然调用alert()
仍在允许,甚至在 中onbeforeunload
,这很有趣,这正是“错误”“修复”的原始原因:在浏览器/应用程序/操作系统/官方外观对话框中显示自定义文本。