29

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

我唯一接近工作的

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

但是,如果我用 alert("blah") 之类的东西替换 return "alert",我从 Chrome 中什么也得不到。

我在这个问题中看到谷歌故意阻止了这一点。对他们有好处...但是如果我想在有人关闭窗口时进行 AJAX 调用怎么办?就我而言,我想知道何时有人离开了我网站上的聊天室,由窗口关闭发出信号。

我想知道是否有办法
(a):修复 window.onbeforeunload 调用,以便我可以将 AJAX 放在那里

(b):获得其他方法来确定 Chrome 中的窗口已关闭

4

5 回答 5

15

回答:

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

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

于 2012-03-09T03:01:41.607 回答
5

截至 69.0.3497.92,Chrome 尚未达到标准。但是,已提交错误报告,并且正在进行审查。

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

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';

于 2018-09-16T21:27:17.590 回答
4

这是一个更直接的方法。

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

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

在此处输入图像描述

于 2015-06-29T17:18:06.530 回答
3

根据MDN

该函数应为 Event 对象的 returnValue 属性分配一个字符串值并返回相同的字符串。

这是以下

window.addEventListener( 'beforeunload', function(ev) { 
    return ev.returnValue = 'My reason';
})
于 2016-06-21T15:12:40.010 回答
2

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

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

于 2021-06-30T18:10:22.130 回答