跨域帧通信

时间:2012-12-13 17:05:29

标签: javascript html cross-domain

我们有2个网络应用程序,在2个不同的框架(A& B)中显示信息。 A中的javascript读取B的隐藏字段,并根据隐藏字段的值进行一些操作。 A还负责加载B的第一页,B可以有​​多个页面,A的命令可以在B的任何页面中,B a的页面是基于B的当前状态动态构造的。 当A和B来自同一个域时,一切正常。 但在某些情况下(应用程序的性能和结构)我们需要让A和B来自2个不同的域,在这种情况下,跨域限制不允许A读取B隐藏字段。我尝试使用Access-Control-Allow-Origin但它的接缝在浏览器中已经加载的2帧之间不起作用。 虽然您可以认为这种应用程序可以引发安全问题,但这些应用程序可以在Intranet上运行。

有人有解决问题的想法

1 个答案:

答案 0 :(得分:0)

如果您在同一窗口中有来自不同域的多个iframe,您应该使用postMessage API,这样可以在iframe之间发送消息(无论来源如何)。但是,您必须更改两个iframe中的代码才能使postMessage生效。

基本上,A代替B的读取字段,而不是向B发送消息,告诉它想要读取它的字段,然后B会将另一条消息发送回A,其中包含这些字段中的数据。

您还可以尝试使用基于postmessage的一些更高级的库,例如jsChannelpmrpc,这使您能够以更自然的方式(远程过程调用)而不是发送消息来在iframe之间进行通信。