通道消息 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

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

示例

规范

规范
HTML 标准
# channel-messaging

浏览器兼容性

api.MessageChannel

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

api.MessagePort

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

另请参阅