Channel Messaging API

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

通道消息 API 允许同一文档中不同浏览上下文(例如,两个 iframe,或者主文档和一个 iframe,通过 SharedWorker 的两个文档,或两个 worker)运行的两个独立脚本直接通信,通过两端各有一个端口的双向通道(或管道)互相传递消息。

概念与用法

使用 MessageChannel() 构造函数创建一个消息通道。创建后,可以通过 MessageChannel.port1MessageChannel.port2 属性(它们都返回 MessagePort 对象)访问通道的两个端口。创建通道的应用使用 port1,而端口另一端应用使用 port2 —— 您将消息发送到 port2,然后使用 window.postMessage 以及两个参数(要发送的消息,以及要转移所有权的对象的,在此情况下是端口本身)将端口传输到另一个浏览上下文。

当这些可转移对象被传输时,它们在其先前所属的上下文中将不再可用。端口在发送后,原始上下文将无法再使用它。

另一个浏览上下文可以使用 onmessage 来监听消息,并使用事件的 data 属性获取消息内容。然后,您可以通过使用 MessagePort.postMessage 向原始文档发送消息进行响应。

当您想停止通过通道发送消息时,可以调用 MessagePort.close 来关闭端口。

有关如何使用此 API 的更多信息,请参阅 使用通道消息

接口

MessageChannel

创建一个新的消息通道用于发送消息。

MessagePort

控制消息通道上的端口,允许从一个端口发送消息并监听它们到达另一个端口。

示例

  • 我们在 GitHub 上发布了一个 通道消息基础演示(也可以 在线运行),该演示展示了一个页面和一个嵌入的 <iframe> 之间非常简单的单消息传输。
  • 您还可以看到一个 多消息演示在线运行),该演示展示了一个更复杂的设置,可以在主页面和 iframe 之间发送多条消息。

规范

规范
HTML
# channel-messaging

浏览器兼容性

api.MessageChannel

api.MessagePort

另见