Javascript window.unload在IE8中不工作
我想在父窗口打开的子窗口的Javascript window.unload在IE8中不工作,javascript,javascript-events,Javascript,Javascript Events,我想在父窗口打开的子窗口的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浏览器。您可以在卸载之前使用
尝试一些东西。我在一个intranet应用程序的打印报告中使用了类似的方法,该应用程序通过AJAX调用来标记它已打印:
if (window.onbeforeunload) {
window.onbeforeunload = function() { didPrint(someData); };
} else {
window.onunload = function() { didPrint(someData); };
}
您可以在卸载之前使用onbeforeunload
尝试一些东西。我在一个intranet应用程序的打印报告中使用了类似的方法,该应用程序通过AJAX调用来标记它已打印:
if (window.onbeforeunload) {
window.onbeforeunload = function() { didPrint(someData); };
} else {
window.onunload = function() { didPrint(someData); };
}
替换attachEvent
而不是onunload
设置器以添加事件。我已经在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);
}
}
显然,如果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);
}
注意:其他答案建议在卸载前使用事件。请记住,在此事件期间,允许实现忽略确认
、警报
、提示
和显示模态对话框
调用。替换附件
而不是onunload
设置器以添加事件。我已经在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);
}
}
显然,如果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);
}
注意:其他答案建议在卸载前使用事件。请记住,在此事件期间,允许实现忽略确认
、警报
、提示
和显示模态对话框
调用。我尝试了一下。。。但是运气不好:(你有什么错误吗?试着按F12,然后转到“脚本”选项卡,然后按“开始调试”。我试了一下……但是运气不好:(您是否有任何错误?请尝试按F12键,然后转到“脚本”选项卡,然后按“开始调试”。已运行..谢谢!!!但您能否解释一下我的代码为何无法运行…我刚刚在创建的窗口中添加了一个简单的卸载事件。@RutwikReddy忽略了setter。非常感谢老兄。您是一个天才。我找到的最佳解决方案。已运行..谢谢s!!!但是你能解释一下为什么我的代码不起作用吗…我刚刚在我创建的窗口中添加了一个简单的卸载事件。@RutwikReddy忽略了setter。非常感谢你,伙计。你是个天才。这是迄今为止我找到的最好的解决方案。