postmessage两个相同来源的儿童窗口

时间:2015-01-21 05:22:42

标签: javascript

我想知道在以下情况下如何在js之间实现正确的通信方式(最好使用postMessage):

P A R E N T  | | CHILD1 CHILD2

父级是origin1,两个子级都在origin2中(实际上是两个不同模式下的同一个网站)。

如何向准确的孩子发送消息,避免第二个孩子做出反应。

提前致谢

1 个答案:

答案 0 :(得分:0)

假设您打开了两个弹出窗口:

/*
 * In window A's scripts, with A being on <http://example.com:8080>:
 */

var popup1 = window.open(...popup details...),
    popup2 = window.open(...popup details...);

popup1.postMessage('some message to popup 1', 'http://example.org');
popup2.postMessage('some message to popup 2', 'http://example.org');

在弹出窗口中,您需要添加一个侦听器代码:

function receiveMessage(event)
{
  // Do we trust the sender of this message?  (might be
  // different from what we originally opened, for example).
  if (event.origin !== "http://example.org")
    return;

  // event.source is popup
  // event.data is "some message to popup 1"
}
window.addEventListener("message", receiveMessage, false);

这里的问题是两个弹出窗口都需要与父窗口属于同一个域。