2012-06-25 140 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';}