2014-01-25 75 views
0

比方說,我創建一個動態的iFrame是這樣的:等待一個動態的iFrame加載使用jQuery

$('body').prepend('<iframe id="e" src="/page.html"></iframe>'); 

現在,我想等這個iFrame來完成加載,這樣我可以訪問它的源。 我可以做到這一點使用:

$('#e').load(function() {} 

但是,如果對需要很長的時間來加載,那麼我只是在等待什麼「/page.html」的圖像或任何東西,因爲所有的我需要是源頭。

所以我的問題是,是否有可能做這樣的事情,而不是:

while not exists ($("#e").contents().find('#someid')) { //wait } 

所以這只是等待,直到「#someid」在我們的iFrame是否存在(意味着至少源代碼加載完畢)。

這可能嗎?

+0

嘗試,看看它只會工作,如果'$(「#E」)。準備(函數(){}'幫助。 –

+0

你好,謝謝你,但它不會與一個動態的iFrame。 –

回答

1

在主窗口中,你可以聲明功能(可以說iframeReady):

function iframeReady() { 
    //your code 
} 

並把下面的代碼body標記中的iframe結束:

所以,你可以訪問父窗口通過parent對象

因此parent.window.iframeReady將在body內容加載,並不會等到所有的圖像加載

買者:如果父窗口和iframe具有相同的域

+0

您好,謝謝,但由於內容不同,我無法提前編輯iFrame頁面。 –

+0

@ P.Henderson如果您將'parent.window.iframeReady();'添加到'body'標記的最後,它將在可能加載所有內容時執行。爲了確保這一點,你可以在'setTimeout'中調用'iframeReady'(在10ms內)。或者您可以在iframe中使用[DOMContentLoaded](https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded),但在IE8及更高版本中無效 – Curious