我正在尝试这样做:
$(function() {
var parent = window.opener;
$(window).bind('unload', function() {
parent.setTimeout(function() {
parent.console.log('Fired!');
}, 200);
}
});
以上示例适用于FF,Chrome等,但不适用于IE8。在后者中,setTimeout()中指定的回调似乎永远不会被触发。
基本原理是,当关闭弹出窗口时,我想在父窗口(window.opener)中执行一些代码。我希望弹出窗口能够对此负责,而不是相反。
只是为了证明这个概念有效:
$(function() {
var parent = window.opener;
$(window).bind('unload', function() {
parent.console.log('Fired!');
}
});
在绑定绑定中立即调用console.log(如上例所示)似乎在所有浏览器中都有效(这里不是针对IE6),但是只要我将setTimeout()添加到混合中它就会中断。
有可能吗?这是范围问题吗?
答案 0 :(得分:1)
在IE中,函数绑定到其所有者窗口。它们可以从另一个窗口调用,但是当一个窗口被卸载时,它的所有功能都会死掉。如果你尝试在onunload之后显式调用一个,你将得到一个'调用的对象已经与其客户端断开连接'错误。
所以在孩子onunload中你应该立即回叫父母。如果父母需要延迟,则必须自己提供。
(您可能还应该检查父项不是null
,还没有closed
,并将访问尝试包装在try
中,这样您就不会父窗口已关闭或导航时出错。)