2010-04-22 45 views
5

是否可以使用頁面中但在此框架之外的腳本來讀取/編輯iframe內容(不僅是src等屬性)?我知道如果源自其他網站是不可能的,因爲這將是一個很大的漏洞,但我只問它是否適用於來自同一來源的其他內容。使用Javascript和相同來源的內聯框架

+0

我覺得這個環節說這一切[腳本Iframes - 教程和示例](http://www.dyn-web.com/tutorials/iframes/) – mplungjan 2010-04-22 17:42:06

回答

0

如果iframe的內容是從同一個域,你可以通過使用frames.myiframe.getElement...

0

瀏覽器只限制用戶訪問內容的iframe /父內容是不是來自同一個域名訪問它。對於來自同一個域名的請求,您可以通過window.parentmyiframe.document.getElementByIdmyiframe.document.getElementById

3

訪問內容。如果iframe和父頁面的位置屬於同一主機(相同的源策略),則可以執行此操作。

爲了確保瀏覽器可以讓你做到這一點,你可以在父頁面上,並在iframe使用

document.domain = "example.com" 

。 (請注意,subdomain.example.com和example.com是不同的)

大教堂方法這樣做(父頁面的iframe):

document.getElementById("myiframe").contentWindow.document.getElementById("divinframe").innerHTML = "I'm on the inside."; 

document.getElementById("myiframe").contentWindow.someFunctionInsideIframe();

contentWindow是答案,在大多數情況下,如果不是所有的現代瀏覽器,肯定是鉻,即7 +等

要走另一條路(iframe到父頁):

top.document.getElementById("DivInTopParent") 
4

要添加到什麼已經說,大約有來自同一個域加載iFrame的互動:只要

瀏覽器將讓你與I幀(或幀)互動,正試圖在頁面做交互和你已經加載的頁面有相同的document.domain。

您可以將document.domain設置爲您從中加載的主機的後綴。例如如果你有一個從blog.fred.com加載一個頁面,它希望與一些服務,稱爲jsonservice.fred.com互動,兩個頁面將不得不做

document.domain = 'fred.com'; 

的JavaScript之前,將能夠與互動另一個。

瀏覽器是足夠聰明,不要讓您設置document.domain的以「.com」之間,如果你想知道...

0

這不正是一個客戶端/ JavaScript的解決方案,但它幫助我解決了這個問題。

您需要刪除X-Frame-Options頭,如果存在的話,而是發送下列之一的iframe頁面:

Content-Security-Policy: frame-ancestors 'self' example.com *.example.com 

和另外一個針對IE:

X-Content-Security-Policy: frame-ancestors 'self' example.com *.example.com