Javascript 如何使用postMessage从嵌套的iFrame到根文档进行通信?

Javascript 如何使用postMessage从嵌套的iFrame到根文档进行通信?,javascript,jquery,iframe,nested,postmessage,Javascript,Jquery,Iframe,Nested,Postmessage,我正在开发一个插件,它必须使用嵌套的iframe管理相当复杂的页面,如下所示: page.html <body> <iframe A> <iframe B> <div bla></div> </iframe> </iframe> <iframe C> <div foo></div> </iframe> </body> ht

我正在开发一个插件,它必须使用嵌套的
iframe
管理相当复杂的页面,如下所示:

page.html
<body>
 <iframe A>
  <iframe B>
   <div bla></div>
  </iframe>
 </iframe>
 <iframe C>
   <div foo></div>
 </iframe>
</body>
 http://www.path/to/iFrame.html?base=...encodeURI(window.location.href.of.root)
因此,iFrame将加载如下URL:

page.html
<body>
 <iframe A>
  <iframe B>
   <div bla></div>
  </iframe>
 </iframe>
 <iframe C>
   <div foo></div>
 </iframe>
</body>
 http://www.path/to/iFrame.html?base=...encodeURI(window.location.href.of.root)
我的问题是,我需要
postMessage
从嵌套的iFrame到根目录,但我无法让它工作。以下是我正在做的:

// sending a message
var adressArray = window.location.href.split("?");
options.src = options.src || adressArray[0];
window.postMessage(options, options.src);

// receiving
window.addEventListener("message", receiveMessage, false);

function receiveMessage(event) {
  console.log(event.data);
  console.log(event.origin);
  console.log(window);
}
我的问题是,调用和侦听器都在同一个插件中,但是应该在插件的不同实例中侦听。例如,
frame B
的实例将触发
postmessage
,并且我的
页面上的侦听器应该检测到该消息

我认为该属性是指定postMessage应该发送到的目的地。相反,我最终发送的是我的发布iFrame(B)的URL,它由父iFrame(A)记录,而不是page.html实例监听它

问题:
有没有可能“跨越”两个(或任意数量的)父母发送一条postMessage,而不在树上“冒泡”呢?假设iFrameB的实例想要对page.html的实例说“你好”,那么当我可以使每个iFrame都可以使用“根实例URL”时,如何使用
postMessage

谢谢


问题:

窗口。top
似乎是我的朋友,因为它返回最顶端的窗口元素

当我将邮件发送到:

var top = window.top;
top.postMessage("foo", currentFrameUrl);
它工作正常

不过我会继续传递URL,因为在跨域iFrame上,
window.top
肯定不起作用