Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript window.unload在IE8中不工作_Javascript_Javascript Events - Fatal编程技术网

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。非常感谢你,伙计。你是个天才。这是迄今为止我找到的最好的解决方案。