2010-08-10 19 views
2

我试图做到这一点:Attatching的setTimeout()从窗口window.opener在卸载回调

$(function() { 
    var parent = window.opener; 

    $(window).bind('unload', function() { 
     parent.setTimeout(function() { 
      parent.console.log('Fired!'); 
     }, 200); 
    } 
}); 

上面的例子行之有效的FF,铬等,但不是IE8。在后者中,setTimeout()中指定的回调似乎永远不会被触发。

理由是我想在父窗口(window.opener)中执行一些代码,当一个弹出窗口关闭时。我希望弹出窗口对此负责,而不是相反。

只是为了证明这一概念的作品:

$(function() { 
    var parent = window.opener; 

    $(window).bind('unload', function() { 
     parent.console.log('Fired!'); 
    } 
}); 

绑定到卸载回调立即调用的console.log(如上面的例子)似乎在所有的浏览器是工作(这里不针对IE6) ,但只要我将setTimeout()添加到混音中就会中断。

可能吗?这是范围问题吗?

回答

1

在IE中,函数绑定到它们的所有者窗口。它们可以从另一个窗口调用,但是当一个窗口被卸载时,它的所有功能都会消失。如果你尝试在onunload之后显式地调用一个,你会得到一个'被调用的对象已经从它的客户端断开'的错误。

因此,在子onunload你应该立即调用父母回来。如果父母需要延迟,则必须自行提供。

(你或许应该同时检查父不null,一直没有closed,并包裹在一个try接入尝试,让你没有得到一个错误,如果父窗口已经关闭或导航)

+0

Aww无益。猜猜我必须尝试不同的方法。 是否有可能将回调函数从“孩子”传递给父母?评论可能不是代码的好地方,但我在想: parent。$(parent).trigger('myEvent',{'callback':function(){alert('foo')) ;}); 我已经尝试了上述和回调似乎也被绑定到子窗口。有没有办法解决这个问题? – peterfarsinsen 2010-08-10 16:19:12

相关问题