跨域JavaScript,嵌入iframe案例中的父位置设置

时间:2009-07-20 03:15:12

标签: javascript iframe cross-domain

有一个名为“Fragment Id Messaging”的解决方案,通过设置parent.location和其他文本,后跟来自子iframe的“#”来解决跨域通信,它可以工作。但是,如果父级本身作为iframe嵌入到另一个页面中,则parent.location设置似乎被浏览器拒绝... 这是真的?如果是,是否有解决办法?

谢谢!

2 个答案:

答案 0 :(得分: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,这是任何其他浏览器都不需要的。

最终结果是,要实现远程域上的页面和弹出窗口之间的通信,您需要一个适用于现代浏览器的分支,一个用于旧版浏览器,另一个用于每个 IE8,IE7和IE6。谢谢微软......

祝你好运:)

答案 1 :(得分:1)

您遇到问题的浏览器是什么,您看到的确切错误消息是什么?

通常,即使在您描述的场景中,FIM也应该正常工作,并且许多主要网站都使用它。

仅当HTML5 postMessage API(IE8,FF3,Chrome和Opera 10支持)不可用时才应使用FIM,因为postMessage更安全,更可靠。