2011-04-09 132 views
16

我有一個文件:1.html和一個iframe裏面。
我想要訪問存在於1.html(iframe外部)的iframe iframe中的元素(讓我說myelement)。
我該怎麼做?
我想:訪問iframe外部的元素

top.getElementById("myelement") 
top.document.getElementById("myelement") 
parent.getElementById("myelement") 
parent.document.getElementById("myelement") 

,但它沒有工作!

+0

可能的重複[iframe訪問父DOM?](http://stackoverflow.com/questions/2620755/iframe-accessing-parent-dom) – lulalala 2015-08-20 03:30:04

回答

30

跨源資源不可能在iframe和父文檔之間進行通信。它只有在iframe和包含的頁面來自相同的主機,端口和協議 - 例如, http://example.com:80/1.htmlhttp://example.com:80/2.html

對於跨域資源,可以利用window.postMessage在兩者之間進行通信,但如果瀏覽器支持這種方法,這是唯一有用的,如果你有兩個以上資源的控制。還有就是MDC頁上更詳細的信息有關window.postMessagehttps://developer.mozilla.org/en/DOM/window.postMessage

編輯 - 假設兩個資源都來自同一產地

在iframe,window.parent指父文件的全局對象,而不是文檔對象本身。我相信您需要使用parent.document.getElementById

+0

parent.document。getElementById確實有效!也許我忽略了這一個......我不得不在原始文檔(jsp)和iframe(也是jsp)之間進行通信......會話bean非常複雜......丟失了某處..再次感謝。 – user646093 2011-04-09 15:51:41

+0

我發現與此相關的東西,如果使用parent.myfunction()在父頁面上調用函數,則仍然需要執行此操作以獲取這些元素。至少我使用過Firefox。 – 2017-07-24 19:50:14

+0

'parent.document.getElementById'確實可以正常工作......謝謝 – 2018-02-08 13:47:18

-6

一個iframe和父文檔之間的通信是不可能 的跨域資源

是在很多方面錯了,我不甚至想知道從哪裏開始。當然,跨域請求和算法交換具有悠久的歷史,它既有文檔記錄,現在也可以工作,可以通過JQuery啓動JSON請求甚至簡單的XMLHttp-Request,例如,甚至可以加載整個.js-文件並將它們注入到代碼中 - 在遠程源代碼中注入代碼當然需要適當的接口;人們可以通過與負責人的溝通來實現這樣的事情,只要問好他們,也許他們會合作,如果你的項目是合理的並且有用的話。

要回答這個問題:訪問整個文檔會引起事先轉移它的需要 - 我會爲此推薦XML,因爲DOM樹和XML幾乎是可以互換的。通過.get.ajax遠程主機)加載樹,append它到這個和訪問它,就像你想...聽起來很容易,如果你有一些經驗,它很容易。如果你再次在同一句中讀到「跨域」和「不可能」,你可能會忽略海報 - 那裏有很多人不知道他們在說什麼;-)

+5

你在說什麼基本上是客戶端的HTML抓取。聽起來這不是OP想要做的。就「跨域」和「不可能」而言......人們已經經歷了很多麻煩,以阻止iframe訪問來自其他域的窗口。我不認爲你很好地理解了這個問題。 – 2012-08-16 20:47:09