是否可以使用頁面中但在此框架之外的腳本來讀取/編輯iframe內容(不僅是src等屬性)?我知道如果源自其他網站是不可能的,因爲這將是一個很大的漏洞,但我只問它是否適用於來自同一來源的其他內容。使用Javascript和相同來源的內聯框架
回答
如果iframe的內容是從同一個域,你可以通過使用frames.myiframe.getElement...
瀏覽器只限制用戶訪問內容的iframe /父內容是不是來自同一個域名訪問它。對於來自同一個域名的請求,您可以通過window.parent
或myiframe.document.getElementById
或myiframe.document.getElementById
訪問內容。如果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")
要添加到什麼已經說,大約有來自同一個域加載iFrame的互動:只要
瀏覽器將讓你與I幀(或幀)互動,正試圖在頁面做交互和你已經加載的頁面有相同的document.domain。
您可以將document.domain設置爲您從中加載的主機的後綴。例如如果你有一個從blog.fred.com加載一個頁面,它希望與一些服務,稱爲jsonservice.fred.com互動,兩個頁面將不得不做
document.domain = 'fred.com';
的JavaScript之前,將能夠與互動另一個。
瀏覽器是足夠聰明,不要讓您設置document.domain的以「.com」之間,如果你想知道...
這不正是一個客戶端/ 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
我覺得這個環節說這一切[腳本Iframes - 教程和示例](http://www.dyn-web.com/tutorials/iframes/) – mplungjan 2010-04-22 17:42:06