我想unload
在父窗口打开的子窗口上执行 javascript。我尝试了下面的代码,它没有调用该函数。
childWindow = window.open(url, 'MyWindow', GetWindowOptions(1020, 600), true);
childWindow.onunload = function () { test(); };
我写的测试函数是:
function test() {
alert(1);
}
我正在使用 IE8 浏览器。
我想unload
在父窗口打开的子窗口上执行 javascript。我尝试了下面的代码,它没有调用该函数。
childWindow = window.open(url, 'MyWindow', GetWindowOptions(1020, 600), true);
childWindow.onunload = function () { test(); };
我写的测试函数是:
function test() {
alert(1);
}
我正在使用 IE8 浏览器。
替换attachEvent
而不是onunload
设置器以添加事件。我已经在 IE6 - 8 中对其进行了测试,它运行良好。确保您还addEventListener
用于 IE9+ 和其他浏览器:
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);
}
}
显然,如果 URL 来自不同的域,这将不起作用。
如果要在关闭来自不同来源的窗口时执行函数,请使用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
事件。请记住,规范允许实现在此事件期间忽略confirm
、alert
和调用。prompt
showModalDialog
您可以尝试使用onbeforeunload
. 我在 Intranet 应用程序的打印报告上使用了类似的东西,该应用程序执行 AJAX 调用以标记它已打印:
if (window.onbeforeunload) {
window.onbeforeunload = function() { didPrint(someData); };
} else {
window.onunload = function() { didPrint(someData); };
}