window.onunload 在 Chrome 浏览器中无法正常工作。谁能帮我?

IT技术 javascript browser onunload window.onunload
2021-01-29 21:15:48

我已经写了这段代码

function winUnload() {
    alert("Unload Window");
    MyMethod();
}

window.onunload = function() { winUnload(); }

此代码在 IE 和 Firefox 中运行良好。但是这段代码在 Chrome 中不起作用。双方的陈述alert("Unload Window");MyMethod();不工作。

6个回答

在卸载事件内部,有些操作在 chrome 中不起作用。警报或确认框就是这样的东西。

但是有什么可能(AFAIK):

  1. 打开弹出窗口(使用 window.open) - 但如果您的站点禁用了弹出窗口阻止程序,这将起作用
  2. 返回一个简单的字符串(在 beforeunload 事件中),它会触发一个确认框,询问用户是否要离开页面。

#2 的示例:

$(window).on('beforeunload', function() {
    return 'Your own message goes here...';
});

演示:http : //jsfiddle.net/PQz5k/

@Armin - 不错的收获。谢谢。我将您的代码扩展为不打扰用户提交表单和内部导航:jsfiddle.net/5wyr2u5x
2021-03-27 21:15:48
在最新的 Chrome 中,我已经认识到该消息不再是个人的。它说“页面上有未保存的更改,您真的要离开吗?”。我收到了德语的消息,所以我随意翻译了它^^
2021-03-29 21:15:48
@Armin 是否可以仅触发确认框关闭选项卡?
2021-04-11 21:15:48

我知道这很旧,但我找到了使用 Chrome 进行卸载的方法

window.onbeforeunload = function () {
  myFunction();
};
window.onbeforeunload = myFunction; 更好
2021-03-20 21:15:48
当页面刷新/页面加载时第一次调用 onbeforeunload 中的函数。如果我再次刷新页面,它不会触发。我错过了哪里?
2021-03-31 21:15:48
myFunction() - 将被调用 2 次!最好只在 onbeforeunload 上:window.onbeforeunload = (function(){ myFunction() })
2021-04-09 21:15:48

阿明的回答很有用,谢谢。#2 是在尝试设置适用于大多数浏览器的卸载事件时最重要的知识:您不能使用 alert() 或 confirm(),但返回一个字符串将生成一个确认模式。

但是我发现即使只返回一个字符串,我也有一些特定于 Mootools 的跨浏览器问题(在本例中使用版本 1.4.5)。这个 Mootools 特定的实现在 Firefox 中运行良好,但在 Chrome 或 Safari 中没有导致确认弹出:

window.addEvent("beforeunload", function() {
    return "Are you sure you want to leave this page?";
});

所以为了让我的 onbeforeonload 事件跨浏览器工作,我不得不使用 JavaScript 本机调用:

window.onbeforeunload = function() {
    return "Are you sure you want to leave this page?";
}

不知道为什么会这样,或者它是否已在 Mootools 的更高版本中修复。

在 2017 年,此解决方法显示一条消息,但不显示我想要的消息,因此为给我提供一些可以使用的东西点赞:D
2021-03-15 21:15:48

请尝试window.onbeforeunload代替window.onunloadchrome。您也可以尝试onbeforeunloadbody>可能在 chrome 中工作标签进行调用

但是,我们在 chrome 浏览器中的卸载功能确实存在问题。请检查

通过正文/窗口卸载事件调用时,location.href 在 chrome 中不起作用