2011-11-03 102 views
29

如何在Firefox中修復此消息?我正在使用具有錨標籤的Iframe?我想獲得對這種定位的一個參考,但我收到的時候我試圖訪問錨此錯誤:錯誤:權限被拒絕訪問屬性「文檔」

var frameWindow = document.getElementById('myIframe').contentWindow; 
var anchor = frameWindow.document.links[0]; //.getElementsByClassName('a'); 
anchor.onclick.... 
+2

你不能這樣做,如果框架指向不同的域。 –

+0

似乎iframe與父頁面不在同一個域中。那麼您無法訪問內容。 –

+2

如果它位於另一個域中,則可以使用Firebug CD命令進行開發:https://groups.google.com/forum/?fromgroups=#!topic/firebug/DvUvoLw-hOI(http://getfirebug.com/wiki/ index.php/Command_Line_API#cd.28window.29) – baptx

回答

10

如果在iframe指向不同的域名,你會得到這個錯誤。這是您的瀏覽器防止跨站點腳本的例子:http://en.wikipedia.org/wiki/Cross-site_scripting

+28

這是好的,丹迪,但OP想知道如何解決它。 – Noz

+5

@TarynEast Baptx的評論是一個更好的答案,至少它試圖提供一個解決方案。儘管我甚至可能會建議easyXDM之類的東西。 – Noz

22

Relaxing the same-origin policy

在某些情況下,同源策略是使用多個子域大型網站過於嚴格,提出問題。這裏有四個技巧放鬆吧:

document.domain property

如果兩個窗口(或幀)包含設置域的值相同的腳本,同樣的原產地政策放寬了這兩個窗口,每個窗口可與其他人互動。例如,從orders.example.com和catalog.example.com加載的文檔中的合作腳本可能會將其document.domain屬性設置爲「example.com」,從而使文檔看起來具有相同的來源並使每個文檔能夠讀取另一個的屬性。這可能並不總是有效,因爲存儲在內部表示中的端口可能會被標記爲空。換句話說,example.com端口80將變成example.com端口爲空,因爲我們更新了document.domain。端口null可能不會被視爲80(取決於您的瀏覽器),因此可能會失敗或取決於您的瀏覽器成功。

Cross-Origin Resource Sharing

放鬆的同源策略的第二個技術被名跨來源資源共享下的標準化。本標準草案將HTTP擴展爲新的Origin請求標頭和新的Access-Control-Allow-Origin響應標頭。它允許服務器使用頭來明確列出可能請求文件的起源或使用通配符並允許任何站點請求文件。諸如Firefox 3.5和Safari 4之類的瀏覽器使用這個新頭來允許具有XMLHttpRequest的跨域HTTP請求,否則這些請求將被同源策略禁止。

Cross-document messaging

另一個新的技術中,跨文檔消息收發允許腳本從一個頁面到文本消息傳遞給腳本另一頁上不管腳本起源。在窗口對象上調用postMessage()方法異步觸發該窗口中的"onmessage"事件,從而觸發任何用戶定義的事件處理程序。一個頁面中的腳本仍然無法直接訪問其他頁面中的方法或變量,但它們可以通過此消息傳遞技術安全地進行通信。

JSONP

JSONP允許網頁通過添加<script>元件,其裝載從不同的域的JSON響應的頁面從不同的域接收JSON數據。

函數調用是JSONP的「P」 - 圍繞純JSON的「填充」,或者根據some「前綴」。根據約定,瀏覽器在其對服務器的請求中(例如,通常使用名稱jsonp或回叫作爲命名查詢參數字段名稱)提供回叫函數的名稱作爲命名查詢參數值。,

<script type="application/javascript" 
     src="http://server2.example.com/Users/1234?jsonp=parseResponse"> 
</script> 

在這個例子中,所接收的負載將是:

parseResponse({"Name": "Foo", "Id": 1234, "Rank": 7}); 
相關問題