window.onunload 在 Chrome 中无法正常工作

问题描述 投票:0回答:7

我写了这段代码

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

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

此代码在 IE 和 Firefox 中运行良好。但这段代码在 Chrome 中不起作用。声明

alert("Unload Window");
MyMethod();
都不起作用。

javascript browser onunload window.onunload
7个回答
60
投票

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

但是什么是可能的(据我所知):

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

#2 的示例:

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

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


9
投票

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

window.onbeforeunload = function () {
  myFunction();
};

6
投票

Armin 的回答非常有用,谢谢。 #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 中修复。


3
投票

您可以尝试使用页面隐藏事件

Chrome and Safari

检查这些链接:

如何检测浏览器是否支持pageShow和pageHide?

http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/


3
投票

对于 chrome,请尝试使用

window.onbeforeunload
代替
window.onunload
。 您还可以尝试从
onbeforeunload
标签调用
body>
,这可能适用于 chrome。

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

当通过 body/window 卸载事件调用时,

location.href 在 chrome 中不起作用


2
投票

如果 onload 事件没有触发,onunload 事件也不会触发。不幸的是,onload 事件等待所有二进制内容(例如图像)加载,并且内联脚本在 onload 事件触发之前运行。 DOMContentLoaded 在页面可见时触发,在 onload 之前触发。现在它是 HTML 5 中的标准,您可以测试浏览器支持,但请注意,这需要 <!DOCTYPE html>

(至少在 Chrome 中)。但是,我找不到相应的卸载 DOM 的事件。这样的假设事件可能不起作用,因为某些浏览器可能会保留 DOM 来执行“恢复选项卡”功能。

到目前为止,我发现的唯一潜在解决方案是

Page Visibility API,它似乎需要 <!DOCTYPE html>


2
投票
这有效:

var unloadEvent = function (e) { var confirmationMessage = "Warning: Leaving this page will result in any unsaved data being lost. Are you sure you wish to continue?"; (e || window.event).returnValue = confirmationMessage; //Gecko + IE return confirmationMessage; //Webkit, Safari, Chrome etc. }; window.addEventListener("beforeunload", unloadEvent);
    
© www.soinside.com 2019 - 2024. All rights reserved.