2014-02-21 56 views
1

我基本上試圖顯示第二個網站,屬於同一個組織,但託管在另一個域名,在iframe中。我試圖將一些數據從iframe傳遞到父框架。如何克服iframe中的同源策略?

父幀= foo.com,

的iFrame = bar.com

如果我試圖通過parent.setData(data)從iframe中的數據通過,這給了我一個同源策略錯誤。

所以我做了解決此代碼的包裝,在foo.com/js/wrapper.js託管,其中包含此功能:

var Foo = {}; 
Foo.setData = function(data) 
{ 
    parent.setData(data); 
} 

所以現在我對bar.com iframe是這樣做的:

<script src="http://foo.com/js/wrapper.js"></script> 
<script> 
    Foo.setData(someData); 
</script> 

然而,即使是在parent.setData行上給我一個安全錯誤,即使通過wrapper.js託管在父域中。

有沒有其他方法可以解決這個問題?

+1

https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage – Quentin

+0

@Quentin任何示例代碼的機會? –

+0

該頁面上有一個標題爲「示例」的整個小節! – Quentin

回答

5

您正在尋找postMessage,在這裏讀了起來:https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage

編輯:對不起,沒有看到所有的評論說同樣的事情

+0

你的服務器可能不會強制'www',或者你可以從'window.top.location'解析父窗口並將其用作targetOrigin(當然,確保它是您列入白名單的網域) –

1

另一種有趣的方式來解決這個問題的政策是劫持孩子window.location.hash,因爲它對兩個腳本引擎都是可見的。