4

我有一个指向任意外部域的 iframe http://A。我想http://B在用户事件中将其发送到另一个外国域。

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

我想从我的域中加载一个页面,例如../html/loading.html,介于A和之间B。假设这个页面加载总是很快的。

我观察到设置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';

但是,这会引发跨域错误,说我无法访问 of 中的contentWindow内容http://A(因为loading.html尚未加载,我们仍在运行http://A,我无法强制重新加载)。

有没有办法强制 iframe 同步加载 URL?我正在编写一个 Chrome 扩展程序,所以如果它必须具体crx到那也没关系。

4

2 回答 2

4

一旦当前 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';}
于 2012-06-25T04:50:15.630 回答
2

尝试这个:

最初 iframe 应该使用加载 loading.html

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

在 loading.html 的客户端 onload 事件中,应使用将源更改为其他域 B

    iframe.src = 'http://B';
于 2012-06-25T04:34:26.707 回答