2010-02-15 51 views
3

第三方腳本在我的網頁上創建一個iframe。我需要知道這個iframe何時準備好,所以我可以操縱它的DOM。檢查是否iframe是準備被寫入

我能想到哈克辦法:反覆嘗試修改iframe的DOM和返回成功,當我們改變兩次嘗試之間做出棒。爲了這個工作,我更喜歡一個屬性,我可以反覆檢查iframe。

是否有替代方案,跨瀏覽器已收到方法知道iframe已準備好?例如。我們可以重新定義的onLoad函數來調用到我們的代碼(但我不知道如果我能做到這一點,因爲我沒有創建的iframe)。

回答

0

你可以注入任意腳本代碼到您的iframe?如果是這樣,你應該能夠做到這一點,以便在iframe加載時在iframe中執行一些代碼,以調用父頁面中的代碼。

1

具有可變父:

var setToLoad = false; 

跟進一個函數來設置它:

function SetToLoad() { 
    setToLoad = true; 
} 
在孩子iframe中調用這個函數

然後使用window.opener

function CallSetToLoad() { 
    window.opener.SetToLoad(); 
} 

window.onload = CallSetToLoad; 

這將不會運行,直到iframe中完成加載,如果它是在同一個域中,它會允許接觸到揭幕戰。這需要編輯第三方腳本的一小部分。

編輯:另一種解決方案

既然你不能編輯腳本,你可以嘗試這樣的:

frames["myiframe"].onload = function() 
{ 
    // do your stuff here 
} 
+0

這將不適合我,因爲我無法更改第三方腳本(或要求他們) – 2010-02-16 23:40:46

+0

@Bilal阿斯拉姆:添加編輯 – 2010-02-17 02:07:51

+0

問題的加載事件與iframes是隻有在所有的圖像和子幀加載後纔會觸發。像ready函數的jQuery會更有用。 – Tom 2011-12-14 12:58:00

2

使用jquery?

function callIframe(url, callback) { 
    $(document.body).append('<IFRAME id="myId" ...>'); 
    $('iframe#myId').attr('src', url); 

    $('iframe#myId').load(function() 
    { 
     callback(this); 
    }); 
} 

問題在jQuery .ready in a dynamically inserted iframe

0

比拉爾回答,

有,你可以檢查(在IE工程)一document.readyState屬性。

foo(){ 
if([your iframe id].document.readyState != "complete") 
{ 
    setTimeout("foo()", 500); //wait 500 ms then call foo 
} 
else 
{ 
    //iframe doc is ready 
} 
} 

阿爾卡季