2012-06-25 91 views
1

我有一个指向任意外域的iframe http://A。我想将其发送到用户事件的另一个外地域http://B强制同步iframe加载

http://B加载速度很慢。如果我只设置iframe.src = "http://B",那么iframe将保留A的内容,直到B被完全下载并且可以呈现。这让用户感到困惑,因为他们要求B,但他们看到的全部是A

我想从我的域中加载一个页面,例如../html/loading.html,在AB之间。假设这个页面加载总是很快。我发现iframe.src是异步的。请看下面的代码:

iframe.src = '../html/loading.html'; 
iframe.src = 'http://B'; 

此跳过打开../html/loading.html,右去http://B。 (不管loading.html可能有多快,或者B可能有多慢)。我也试着这样做:

iframe.src = '../html/loading.html'; 
iframe.contentWindow.location.reload(); 
iframe.src = 'http://B'; 

然而,这将引发跨域错误,说我不能在http://AcontentWindow访问的东西(因为loading.html没有加载,我们仍然在http://A和我不能强制重新加载)。

有没有办法强制iframe做同步加载的URL?我正在编写Chrome扩展程序,因此如果它必须特定于crx,那也没关系。

+0

您可以通过创建2'iframe's做到这一点。一个用于'加载',一个用于'// B'。加载完成后显示'// B',然后隐藏'loading'。 –

回答

1

尝试这种情况:

最初的iframe应该使用

iframe.src = '../html/loading.html'; 

在loading.html的客户端onload事件加载loading.html,源应改为使用其它结构域B

iframe.src = 'http://B'; 
+0

太棒了。我想我会通过URL作为参数加载到B;即:'iframe.src ='../ html/loading.html?next = B''。 – Chuck

2

只要当前URL加载完毕,您就需要加载下一个URL,幸运的是iframe有一个我们可以使用的onload事件。

你会想要做这样的事情:

iframe.src='../html/loading.html' 
//load the next page after finishing loading the last one 
iframe.onload=function(){iframe.src='http://B';}