2009-07-20 79 views
2

有一個名爲「Fragment Id Messaging」的解決方案,通過設置parent.location與額外的文本,然後從子iframe中的「#」來解決跨域通信問題。但是,如果父級本身作爲iframe嵌入到另一個頁面中,parent.location設置似乎被瀏覽器拒絕... 這是真的嗎?如果是,是否有解決方法?跨域JavaScript,嵌入iframe案例中的父級位置設置

謝謝!

回答

1

哪些瀏覽器遇到問題?您看到的具體錯誤消息是什麼?

通常情況下,即使在您描述的情況下,FIM也應該正常工作,許多主要網站都使用它。

只有當HTML5 postMessage API(由IE8,FF3,Chrome和Opera 10支持)不可用時才應使用FIM,因爲postMessage更安全,更可靠。

+0

哦,我目前使用Firefox3.5.1,並顯示錯誤消息[進入財產被拒絕 「代碼:」 1010] ...它看起來像一個bug這裏報道http://bit.ly/9xDaU。 IE8確實可以正常工作。謝謝! – 2009-07-20 04:27:05

4

支持postMessage API的現代瀏覽器增加了安全性,阻止了這種幀內通信。在沒有這種支持的瀏覽器上,您使用的技術應該沒問題。唯一的例外是Safari 3.2,不支持HTML 5 postMessage API,並且在某些情況下不允許您設置parent.location。

另一個問題是,儘管IE8已經實現了postMessage API,但它(與其他所有瀏覽器(FF3 +,Chrome,Safari 4+和Opera 9.64+)都有不同的表現)。使用IE8時,彈出窗口和它的開啓者之間的postMessage通信是不允許的,這意味着您需要爲IE8使用額外的iframe,而其他任何瀏覽器都不需要該iframe。

最終的結果是,爲了實現在遠程域中的頁面和彈出窗口之間的溝通,你需要體面的現代瀏覽器的一個分支,一個是舊的瀏覽器,和一個單獨的一個每個的IE8,IE7和IE6。由於微軟...

祝你好運:)

+0

明白了,謝謝! – 2009-07-21 02:58:18