当弹出窗口的URL加载完成时(window.open),我们如何知道?

3

当弹出窗口中的页面加载完成后,我需要更改该页面的URL(我使用window.open函数调用)。 有没有办法在父窗口中找出弹出窗口中的页面何时加载完成?我无法更改在弹出窗口中打开的页面,因为它属于另一个网站。

2个回答

10

window.open 返回对该窗口的 window 对象的引用。

如果打开的窗口指向与窗口打开者相同域上的 URL,则它将像自己的 window 对象一样具有对该对象的完全访问权限。

var w = window.open(url);

// If the window opened successfully (e.g: not blocked)
if ( w ) {
    w.onload = function() {
        // Do stuff
    };
}

这里适用同源策略。如果打开窗口的URL在不同的域上,则打开者将无法访问该窗口引用的成员。


如果您说了和我完全一样的话(但是,您没有提到 if (w) 的含义),我会加一分给您。 :P - Dan Beam
但是,OP不是说他/她不能更改页面吗?这样做不会覆盖页面的onload事件吗? - toc777
我认为 OP 的意思是他们无法物理更改页面上的代码。这提供了一种动态附加侦听器的方法。 - Justin Johnson
我晚了4年,但是非常感谢你实际上解释了幕后发生的事情。 - shriek
1
@shriek 这是互联网,我们都还在这里! - Justin Johnson

4

这似乎很容易理解,但如果您需要更多解释,请告诉我(或者如果它不起作用,尽管它应该...)

var winObj = window.open( /* lot of params */ );

if( !winObj )
{
    /* pop-up blocked! */
}
else
{
    winObj.onload = function( ){ /* do stuff here */ };
}

即使有同源策略的限制,你能否与窗口事件进行连接? - Andy E
我正在打开的弹出式URL位于不同的域上,因此我会收到以下错误: 错误:Permission denied for <file://> to set property Window.onload on http://otherwebsite.com。 - exsource

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接