为什么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仍然支持这一点。