当弹出窗口完成父启动的加载时,如何通知父页面?

时间:2009-08-12 19:29:59

标签: javascript html javascript-events

我的主HTML页面执行以下操作:

var popup = window.open(...);
// Wait for popup to load
popup.onload = function() { do_something(); };
popup.location = "new-page.html";

我希望在do_something完成加载时调用new-page.html。但是我现在所做的不起作用 - do_something永远不会被调用。

我该如何做到这一点?

我只关心在FF 3.5中使用它,如果这样可以使事情变得更容易。

5 个答案:

答案 0 :(得分:4)

你可以使用window.opener。< functionName>并将您的通知代码放在父页面上的该函数中

答案 1 :(得分:1)

您是否尝试过使用开启对象?

http://www.webreference.com/js/tutorial1/opener.html

答案 2 :(得分:1)

或者,在不弄乱子窗口的HTML的情况下,从父级可以在iframe的load事件上附加监听器。在这个解决方案中,我将使用jQuery来简化,但任何库甚至手动事件附件都可以。

在父母的HTML中:

<iframe id="foo"></iframe>
<script type='text/javascript'>
    var element = $("#foo");
    element.load( function( eventObject ) { 
        // do something here
    } );
    // Now that the event listener is attached, we can set the source.
    element[0].src = "foo.html";

</script>

注意,我没有尝试先设置源,然后附加监听器,我不确定这是否可以保证始终有效。可能会发生在加载加载侦听器之前创建/加载iframe,我不确定。但是,通过在连接侦听器之后设置src,我确信将调用加载侦听器。

沙恩

http://www.shanetomlinson.com

http://www.ubernote.com

答案 3 :(得分:0)

尝试在弹出窗口的onload中调用doSomething方法。您可以使用window.opener

返回父级

答案 4 :(得分:0)

在你加载的.html中,你可以在开头窗口调用一个函数(如果存在),在一端有一个简单的一个衬垫

<script type='text/javascript'>
if (window.opener && window.opener.do_something) window.opener.do_something(window);
</script>