2012-02-22 279 views
29

對於我說我有一個名爲example.com的網站,其中iframe嵌入了域iframe.net,現在我想要讀取iframe的內容並傳遞一些參數以顯示文本消息。喜歡用用戶名。跨域iframe問題

現在的問題是這能不能夠使兩者之間的連接,即使我不能夠得到IFRAME的innerHTML我用下面的方法

document.getElementById('myframe').contentWindow.document.body.innerHTML; 

它拋出錯誤「權限被拒絕訪問屬性」

不要任何人知道如何閱讀和跨域平臺

+0

可以使用easyxdm庫交叉域之間的通信。這裏有一個鏈接請結帳。我曾使用這種技術來調整跨域的iframe(寬度,高度)。我不確定這個庫是否適用於您的場景。試一試。 http://easyxdm.net/wp/ – 2012-02-22 11:44:35

回答

37

寫如果你沒有在框架現場控制,你無法繞開跨域策略。

如果您可以控制這兩個站點,則可以使用postMessage方法在不同域之間傳輸數據。一個很簡單的例子:

// framed.htm: 
window.onmessage = function(event) { 
    event.source.postMessage(document.body.innerHTML, event.origin); 
}; 

// Main page: 
window.onmessage = function(event) { 
    alert(event.data); 
}; 

// Trigger: 
// <iframe id="myframe" src="framed.htm"></iframe> 
document.getElementById('myframe').contentWindow.postMessage('','*'); 
+1

是否有任何反向跨域代理入侵 – 2012-02-22 11:03:25

+1

@KunalVashist取決於您的應用程序(需要更多詳細信息)。也看看這個問題[繞過同源政策的方式](http://stackoverflow.com/questions/3076414/ways-to-circumvent-the-same-origin-policy)。 – 2012-02-22 11:10:52

+0

Thx @rob這一個很好,但最終我沒有訪問幀內容 – 2012-02-22 11:25:16

2

在作爲參數傳遞可能的Internet Explorer 8事件,這就是爲什麼你需要以不同的方式來訪問事件:

框架html的

window.onmessage = function(event) { 
    var evt = evt || window.event; 
    evt.source.postMessage('Message from iFrame', evt.origin); 
}; 

main.html中

window.onmessage = function(event) { 
    var evt = evt || window.event; 
    alert(evt.data); 
}; 

該事件被觸發一樣羅布W公司已經提出:

document.getElementById('frameId').contentWindow.postMessage('message','*');