3

我的主要 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 中工作,如果这能让事情变得更容易的话。

4

5 回答 5

4

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

于 2009-08-12T19:37:03.873 回答
1

您是否尝试过使用 opener 对象?

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

于 2009-08-12T19:38:36.927 回答
1

或者,在不弄乱子窗口的 HTML 的情况下,从父窗口中,您可以在 iframe 的加载事件上附加一个侦听器。在这个解决方案中,为了简单起见,我将使用 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

于 2009-08-12T20:14:48.413 回答
0

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

于 2009-08-12T19:40:17.127 回答
0

在您加载的 .html 中,您可以在末尾有一个简单的衬里,它在打开的窗口上调用一个函数(如果它存在)

<script type='text/javascript'>
if (window.opener && window.opener.do_something) window.opener.do_something(window);
</script>
于 2009-08-12T19:45:08.927 回答