我想在父窗口打开的子窗口的unload
上执行javascript。我尝试了下面的代码,它没有调用函数。
childWindow = window.open(url, 'MyWindow', GetWindowOptions(1020, 600), true);
childWindow.onunload = function () { test(); };
我写的测试功能是:
function test() {
alert(1);
}
我正在使用IE8浏览器。
答案 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);
}
}
显然,如果网址来自不同的域,则无效
如果要在关闭不同来源的窗口时执行函数,请使用setInterval
或setTimeout
轮询布尔属性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允许实施在此活动期间忽略confirm
,alert
,prompt
和showModalDialog
来电。
答案 1 :(得分:0)
您可以尝试使用onbeforeunload
。我在内联网应用程序的打印报告上使用类似的东西,该应用程序执行AJAX调用以标记它已打印:
if (window.onbeforeunload) {
window.onbeforeunload = function() { didPrint(someData); };
} else {
window.onunload = function() { didPrint(someData); };
}