2

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

谢谢!

4

2 回答 2

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 的分支。感谢微软...

祝你好运:)

于 2009-07-20T09:31:11.763 回答
1

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

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

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

于 2009-07-20T03:40:41.723 回答