MessagePort

注意:此功能在 Web Workers 中可用。

MessagePort通道消息 API 的一个接口,表示 MessageChannel 的两个端口之一,允许从一个端口发送消息并在另一个端口监听消息的到达。

MessagePort 是一个 可传输对象

EventTarget MessagePort

实例方法

继承自其父级 EventTarget 的方法.

postMessage()

从端口发送消息,并可选地将对象的拥有权转移到其他浏览上下文。

start()

开始发送在端口上排队的消息(仅在使用 EventTarget.addEventListener 时需要;在使用 onmessage 时是隐含的)。

close()

断开端口连接,使其不再处于活动状态。

事件

继承自其父级 EventTarget 的事件.

message

MessagePort 对象收到消息时触发。

messageerror

MessagePort 对象收到无法反序列化的消息时触发。

示例

在下面的示例中,您可以看到使用 MessageChannel() 构造函数创建了一个新的通道。

当 IFrame 加载完毕后,我们为 MessageChannel.port1 注册了一个 onmessage 处理程序,并将 MessageChannel.port2 使用 window.postMessage 方法连同消息一起传输到 IFrame。

当从 IFrame 收到回复消息时,onMessage 函数会将消息输出到一个段落中。

js
const channel = new MessageChannel();
const output = document.querySelector(".output");
const iframe = document.querySelector("iframe");

// Wait for the iframe to load
iframe.addEventListener("load", onLoad);

function onLoad() {
  // Listen for messages on port1
  channel.port1.onmessage = onMessage;

  // Transfer port2 to the iframe
  iframe.contentWindow.postMessage("Hello from the main page!", "*", [
    channel.port2,
  ]);
}

// Handle messages received on port1
function onMessage(e) {
  output.innerHTML = e.data;
}

有关完整的运行示例,请参阅我们在 GitHub 上的 通道消息基本演示也可在线运行)。

规范

规范
HTML 标准
# 消息端口

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅