为什么jQuery onbeforeunload无法在Chrome和Firefox中运行?

时间:2014-04-01 03:59:53

标签: jquery onbeforeunload

jQuery onbeforeunload无法在Chrome和Firefox中使用。它在IE和Safari中正常工作。

jQuery(window).bind('onbeforeunload' ,function () {
    mymethod();
});

以上代码在IE和Safari中正常运行,但在Firefox和Chrome中无效。

1 个答案:

答案 0 :(得分:37)

根据MDN的window.onbeforeunload参考,

  

该函数应将字符串值赋给Event对象的returnValue属性,并返回相同的字符串。

观察this 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仍支持此功能。