为什么jQuery onbeforeunload无法在Chrome和Firefox中运行?
jQuery onbeforeunload
在Chrome和Firefox中无效。 它在IE和Safari中正常工作。
jQuery(window).bind('onbeforeunload' ,function () { mymethod(); });
上面的代码在IE和Safari中正常工作,但在Firefox和Chrome中没有。
根据MDN的window.onbeforeunload参考,
该函数应将字符串值赋给Event对象的returnValue属性并返回相同的字符串。
观察这个jsFiddle
jQuery(window).bind('beforeunload', function(e) { var message = "Why are you leaving?"; e.returnValue = message; return message; });
请注意, 某些事件可能会被忽略 :
[…] HTML5规范声明在此事件期间可能会忽略对window.showModalDialog(), window.alert() ,window.confirm()和window.prompt()方法的调用。
关于AJAX的一个重要说明:
如果您在用户离开时尝试进行AJAX呼叫,则可能会在完成之前取消(中断)请求。 您可以关闭async
选项作为解决此问题的方法。 例如:
$.ajax({ url: "/", type: "GET", async: false });
2017年更新:
当用户离开时,许多浏览器不再支持警报对话框中的自定义文本。
Chrome,Firefox,Opera和Safari的最新版本不显示任何自定义文本。
Edge和IE仍然支持这一点。