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

时间:2011-10-17 13:15:42

标签: javascript browser onunload window.onunload

我写了这段代码

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

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

此代码在IE和Firefox中运行良好。但是此代码在Chrome中无效。语句alert("Unload Window");MyMethod();都无效。

7 个答案:

答案 0 :(得分:53)

在卸载事件中,有些操作在chrome中不起作用。提醒或确认框就是这样。

但是可能的(AFAIK):

  1. 打开弹出式窗口(使用window.open) - 但如果为您的网站禁用弹出式窗口拦截器,则此功能正常工作
  2. 返回一个简单的字符串(在beforeunload事件中),触发一个确认框,询问用户他/她是否要离开页面。
  3. #2的例子:

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

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

答案 1 :(得分:6)

我知道这已经过时了,但我找到了使用Chrome进行卸载的方法

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

答案 2 :(得分:5)

Armin的答案非常有用,谢谢。 #2是尝试设置在大多数浏览器中工作的卸载事件时最重要的:你不能提醒()或确认(),但是返回一个字符串会产生一个确认模态。

但是我发现即使只是返回一个字符串,我也有一些特定于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 :(得分:3)

请尝试 window.onbeforeunload ,而不是 window.onunload 。 您也可以尝试从正文> 标记中调用 onbeforeunload ,这可能适用于Chrome。

但是,我们在Chrome浏览器中遇到卸载功能问题。 请检查

location.href does not work in chrome when called through the body/window unload event

谢谢, Nived

答案 4 :(得分:3)

您可以尝试对Chrome and Safari使用Pagehide事件。

检查以下链接:

How to detect browser support for pageShow and pageHide?

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

答案 5 :(得分:1)

如果onload事件未触发,则不会触发onunload事件。不幸的是,onload event waits for all binary content(例如图片)要加载,inline scripts run before onload事件会触发。当页面可见时,DOMContentLoaded会在onload执行之前触发。它现在是standard in HTML 5,您可以test for browser support但请注意这需要<!DOCTYPE html>(至少在Chrome中)。但是,我找不到卸载DOM的相应事件。这样一个假设的事件可能不起作用,因为某些浏览器可能会保留DOM以执行“恢复选项卡”功能。

我到目前为止找到的唯一可能的解决方案是Page Visibility API,它似乎需要<!DOCTYPE html>

答案 6 :(得分:1)

这有效:

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