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

var*_*tis 25 javascript onbeforeunload window.onunload

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

我唯一接近工作的是这个:

window.onbeforeunload = function () { return "alert" };
Run Code Online (Sandbox Code Playgroud)

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

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

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

(b):获取一些其他方法来确定Chrome窗口已关闭

var*_*tis 14

回答:

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

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

  • 这在 Chrome 中不起作用,并且还会弹出警报。有没有办法忽略chrome中的警报? (2认同)
  • @varatis"4 ---你确定要离开这个页面吗?" 是我得到的确认对话框.但我发现的解决方法是`return null`. (2认同)
  • Hii,这段代码对我不起作用.我需要添加一些jQuery js文件或其他什么? (2认同)
  • @Lior这只是一个例子..根本不重要。 (2认同)
  • 这不起作用,它不会输出自定义消息。 (2认同)
  • 对于出现在这里的任何人来说,大多数浏览器都不推荐使用自定义消息,原因是它们被某些网站滥用,使用户感到困惑。所以现在的消息是一个通用字符串,无法由网页本身控制。无论您返回什么字符串。有关更多详细信息和特定浏览器行为,请参阅 [MDN](https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload) (2认同)

Tre*_*nis 11

从 Chrome 114.0.5735.198 和 Edge 100.0.1185.29 开始,Chromium 尚未达到标准。已提交错误报告,但审核被放弃。

使用 StackBlitz 进行测试!

  • 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';
Run Code Online (Sandbox Code Playgroud)