2009-07-20 78 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