This question already has answers here:
Crossbrowser onbeforeunload?
                            
                                (5个答案)
                            
                    
                6年前关闭。
        

    

jQuery onbeforeunload在Chrome和Firefox中无法使用。它可以在IE和Safari中正常运行。

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


上面的代码可在IE和Safari中正常运行,但不能在Firefox和Chrome中运行。

最佳答案

根据MDN的window.onbeforeunload参考,


  该函数应为事件对象的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仍然支持此功能。

关于jquery - 为什么jQuery onbeforeunload无法在Chrome和Firefox中使用? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22776544/

10-09 23:17