使用postMessage从同一域中的两个iframe之间的通信

时间:2011-07-09 10:25:35

标签: html5 iframe same-origin-policy postmessage

我有两个来自同一个域的iframe,它们托管在另一个域的文档中。问题是这些iframe无法通过postMessage相互通信。我甚至无法从iframe2访问iframe1的DOM,即使它们属于同一个域。有没有解决方案????

我使用以下选项来引用所需的iframe。

parent.frame[x]

我尝试使用以下行来访问iframe的DOM

parent.frame[x].contentWindow returns null,

parent.frame[x].document.getElementsByTagName("body") returns null

更新

我想我的问题不够明确。 postMessage api没有问题,实际问题是浏览器在iframe文档周围创建了一个自定义框架集,在我的情况下!

因此parent.frame[x]不会指向iframe窗口,而是指向iframe窗口中的自定义框架集。

以下问题很好地解释了问题。

Prevent browser from loading a custom frameset in an iframe's document

1 个答案:

答案 0 :(得分:-1)

查看以下postMessage函数的说明以及如何使用它。所以在frame1中你调用postMessage方法,在frame2中你订阅了通知。显然,您使用的浏览器必须支持此API。

还有一个非常好的jQuery plugin,它包装了这个API并简化了它的使用。它也可以在不支持postMessage方法的浏览器中使用url的哈希部分。