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

问题描述 投票:23回答:4

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

我唯一接近工作的是this

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

但是,如果我用“alert”(“blah”)之类的东西替换返回“alert”,我从Chrome中得不到任何结果。

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

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

javascript onbeforeunload window.onunload
4个回答
14
投票

回答:

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

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


3
投票

这是一种更直接的方法。

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

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


2
投票

根据MDN

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

这是以下内容

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

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';
© www.soinside.com 2019 - 2024. All rights reserved.