2009-09-20 263 views
22

我有一個網頁,其中有一個iframe中的textarea。我需要使用JavaScript從它的子頁面讀取這個textarea的值。在JavaScript中訪問iframe元素

目前通過在JavaScript中使用window.parent.getelementbyID().value,我能夠獲取父頁面中除iframe中的textarea之外的所有控件的值。

任何人都可以請給我任何指針來解決這個問題?

+0

任何人都可以幫我請邏輯? –

+0

可能的重複[如何使用Javascript訪問iFrame元素?](http://stackoverflow.com/questions/1452871/how-can-i-access-iframe-elements-with-javascript) – Mark

+0

使用'window.frames ['myIFrame']。contentDocument.getElementById('myIFrameElemId')'適用於現代瀏覽器(例如Firefox 35) - 並注意同源策略 – caw

回答

43

如果您的iframe與您的父頁面在同一個域中,則可以使用document.frames集合訪問元素。

// replace myIFrame with your iFrame id 
// replace myIFrameElemId with your iFrame's element id 
// you can work on document.frames['myIFrame'].document like you are working on 
// normal document object in JS 
window.frames['myIFrame'].document.getElementById('myIFrameElemId') 

如果您的iframe不在同一個域中,出於安全原因,瀏覽器應阻止此類訪問。

+1

非常感謝您的建議。 但問題是,我的父頁中的幀ID和幀名稱在運行時發生變化,因此我們不能使用幀ID /幀名作爲參考。 拉耶爾有沒有其他方式? –

+0

貝絲父母的子網頁在同一個域中。 –

+0

如果你的網站上有一個iframe,你可以嘗試使用'document,frames [0] .document'。如果還有更多,則需要將索引更改爲其他值。 – RaYell

14

您應該window訪問幀,而不是document

window.frames['myIFrame'].document.getElementById('myIFrameElemId') 
+2

這個答案不適合我... –

13

window.frames['myIFrame'].document.getElementById('myIFrameElemId')

工作不適合我,但我發現了另一個解決方案。使用:

window.frames['myIFrame'].contentDocument.getElementById('myIFrameElemId') 

我在Firefox和Chrome上檢查過它。

+1

即使網頁都處於脫機狀態,我仍然遇到安全錯誤。 – TheBrenny

2

此代碼爲我工作:

window.frames['myIFrame'].contentDocument.getElementById('myIFrameElemId'); 
1

確保您的iframe 已經加載。舊的,但沒有jQuery的可靠的方式:

<iframe src="samedomain.com/page.htm" id="iframe" onload="access()"></iframe> 

<script> 
function access() { 
    var iframe = document.getElementById("iframe"); 
    var innerDoc = iframe.contentDocument || iframe.contentWindow.document; 
    console.log(innerDoc.body); 
} 
</script>