5

我对postMessageand感到困惑MessageChannel

以下是来自MDN的一些代码:

var channel = new MessageChannel();
var para = document.querySelector('p');

var ifr = document.querySelector('iframe');
var otherWindow = ifr.contentWindow;

ifr.addEventListener("load", iframeLoaded, false);

function iframeLoaded() {
  otherWindow.postMessage('Hello from the main page!', '*', [channel.port2]);
}

channel.port1.onmessage = handleMessage;
function handleMessage(e) {
  para.innerHTML = e.data;
}

我认为postMessage方法只能接受两个参数,上面的代码表明它可以接受三个,但是方法的第三个参数什么都没有postMessage

所以有我的问题:

  1. 方法的第三个参数是什么意思postMessage

  2. 我知道 的用法MessageChannel,但它似乎没用,我们为什么/何时应该使用 MessageChannel?

4

1 回答 1

6

MessageChannel基本上是一个2路通信管道。将其视为 window.postMessage / window.onmessage 的替代方案 - 但更容易且更可配置。

本指南解释了 postMessage 的第三个参数的含义:

一个对象,其所有权转移到接收浏览上下文。在这种情况下,我们将 MessageChannel.port2 传输到 IFrame,因此可以使用它来接收来自主页面的消息。

PS 我发现Opera的这个指南比 Mozilla 的更容易阅读。

于 2016-05-31T08:00:48.470 回答