2012-05-15 94 views
1

我跟着其他人都說過讓別人去做,但我得到了「空」或「未定義」。從iFrame獲取元素返回Null/undefined?

var frame=win.getElementsByTagName("iframe")[0]; 
var innerDoc = (frame.contentDocument) 
? frame.contentDocument 
: frame.contentWindow.document; 
alert(innerDoc.getElementById("input")); 
+0

你的問題是什麼?你真的有'id =「input」'元素嗎? – Madbreaks

+0

什麼是未定義的? getElementsByTageName,NodeList,frame,innerDoc,getElementById,alert參數? – Bergi

+0

你知道同源策略嗎? – Bergi

回答

2

試試這個例子

<html> 
<head> 
    <title>Iframe Test</title> 
    <script type="text/javascript"> 
    window.onload= function(){ 
     var frame=document.getElementsByTagName("iframe")[0]; 
     var innerDoc = (frame.contentDocument) ? frame.contentDocument : frame.contentWindow.document; 
     alert(innerDoc.getElementById("input")); 
    } 
    </script> 

</head> 
<body> 
    <div> 
     <iframe src="test.htm" /> 
    </div> 
</body> 
</html> 

而且TEST.HTM

<html> 
<head> 
    <title>A test Page</title> 
</head> 
<body> 
    <div id="input"> 
    </div> 
</body> 
</html> 

的它的工作在我的本地機器的來源。

+0

我正在爲特定的瀏覽器工作,所以不用擔心它是contentWindow還是contentDocument。 您的腳本使我的整個頁面由於某種原因無法使用。語法錯誤我似乎無法找到。 但是!當我簡單地這樣做: var frame = win.getElementsByTagName(「iframe」)[0]; var innerDoc = frame.contentDocument; alert(innerDoc); 該腳本提醒「Object HTMLDocument」。這告訴我,這是正確的,不是? 我想真正的問題是:如果它說這是一個HTMLDocument對象,我應該直接在innerDoc後放置什麼?我是否打算將「.document.whatever」或者「.whatever」放在一起? – RickyAYoder

+0

@RickyAYoder,很抱歉聽到。我已經在IE9和FireFox中嘗試了上面這個,並且完美地工作,即它返回Iframe中的元素。當DOM準備好/未準備好時,您是否調用腳本?如果可能的話,請檢查一下。 – Hoque

相關問題