Chrome中的window.onbeforeunload:最近的修复是什么?

时间:2012-03-08 22:27:37

标签: javascript onbeforeunload window.onunload

显然,window.onbeforeunload已经遇到了Chrome的问题,正如我从遇到的所有问题中看到的那样。最近的工作是什么?

我唯一接近工作的是this

window.onbeforeunload = function () { return "alert" };

但是,如果我用“alert”(“blah”)之类的东西替换“alert”,我就不会从Chrome中获得任何内容。

我在this question中看到Google有意阻止了这一点。对他们有好处......但如果有人关闭窗口我想要进行AJAX调用怎么办?在我的情况下,我想知道有人离开我的网站上的聊天室,由窗口关闭发出信号。

我想知道是否有办法要么 (a):修复window.onbeforeunload调用,以便我可以将AJAX放在那里 或
(b):通过其他方式确定Chrome窗口已关闭

5 个答案:

答案 0 :(得分:14)

答案:

$(window).on('beforeunload', function() {
    var x =logout();
    return x;
});
function logout(){
        jQuery.ajax({
        });
        return 1+3;
}

有点混搭,但它对我有用。 1 + 3确保正在调用注销功能(当你试图离开时,如果它在弹出窗口中成功,你会看到4)。

答案 1 :(得分:3)

这是一种更直接的方法。

$(window).on('beforeunload', function() {
    return "You should keep this page open.";
});

返回的消息可以是您想要的任何内容,如果您没有任何内容添加到Chrome已显示的消息中,则可以包含空字符串。结果如下:

enter image description here

答案 2 :(得分:2)

根据MDN

  

该函数应为returnValue属性指定字符串值   的Event对象并返回相同的字符串。

以下是

window.addEventListener( 'beforeunload', function(ev) { 
    return ev.returnValue = 'My reason';
})

答案 3 :(得分:1)

从69.0.3497.92开始,Chrome尚未达到标准。但是,提交了bug report,并且正在进行review

  • Chrome要求通过引用事件对象而不是处理程序返回的值来设置returnValue。
  • standard states可以通过取消事件或将返回值设置为non-null value来控制提示。
  • 标准规定作者应使用Event.preventDefault()而不是returnValue。
  • standard states是向用户显示的消息不可自定义。

window.addEventListener('beforeunload', function (e) {
    // Cancel the event as stated by the standard.
    e.preventDefault();
    // Chrome requires returnValue to be set.
    e.returnValue = '';
});
    
window.location = 'about:blank';

答案 4 :(得分:0)

这解决了我的问题,为什么它在我的应用程序中不起作用:

请注意,在关闭窗口之前,用户必须以某种方式与页面交互(单击某处),否则 beforeunload 将被忽略,以免滥用。