window.unload在IE8中不起作用

时间:2012-08-03 12:08:36

标签: javascript javascript-events

我想在父窗口打开的子窗口的unload上执行javascript。我尝试了下面的代码,它没有调用函数。

 childWindow = window.open(url, 'MyWindow', GetWindowOptions(1020, 600), true);
 childWindow.onunload = function () { test(); };

我写的测试功能是:

function test() {
alert(1);
}

我正在使用IE8浏览器。

2 个答案:

答案 0 :(得分:7)

替换attachEvent而不是onunload setter来添加事件。我在IE6 - 8中测试过它,它运行正常。确保您还为IE9 +和其他浏览器使用addEventListener

var unloadFunc = function () { test(); };
if (childWindow) { // null if a pop-up blocker does not create the window
    if (childWindow.addEventListener) {
        childWindow.addEventListener('unload', unloadFunc, false);
    } else {
        childWindow.attachEvent('onunload', unloadFunc);
    }
}

显然,如果网址来自不同的域,则无效 如果要在关闭不同来源的窗口时执行函数,请使用setIntervalsetTimeout轮询布尔属性childWindow.closed的值。窗户关闭时确实如此。

例如:

if (childWindow) { // null if a pop-up blocker does not create the window
    setTimeout(function checkState() {
        if (childWindow.closed) {
            // onunload Logic here.
        } else {
            setTimeout(checkState, 250);
        }
    }, 250);
}

注意:其他答案建议使用beforeunload事件。请注意,specification允许实施在此活动期间忽略confirmalertpromptshowModalDialog来电。

答案 1 :(得分:0)

您可以尝试使用onbeforeunload。我在内联网应用程序的打印报告上使用类似的东西,该应用程序执行AJAX调用以标记它已打印:

if (window.onbeforeunload) {
    window.onbeforeunload = function() { didPrint(someData); };
} else {
    window.onunload = function() { didPrint(someData); };
}
相关问题