window.unload在IE8中不起作用

TRR*_*TRR 1 javascript javascript-events

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

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

我写的测试功能是:

function test() {
alert(1);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用IE8浏览器.

Rob*_*b W 7

替换attachEvent而不是onunloadsetter来添加事件.我在IE6 - 8中测试过它,它运行正常.确保您还使用addEventListenerIE9 +和其他浏览器:

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

显然,如果URL来自不同的域,这将不起作用.
如果要在关闭来自其他原点的窗口时执行函数,请使用setIntervalsetTimeout轮询boolean属性的值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);
}
Run Code Online (Sandbox Code Playgroud)

注意:建议使用该beforeunload事件的其他答案.请记住,在规范允许实现忽视confirm,alert,promptshowModalDialog这个事件中调用.