通道消息 API
注意: 此功能在 Web Workers 中可用。
通道消息 API 允许在附加到同一文档的不同浏览上下文中运行的两个独立脚本(例如,两个 IFrame 或主文档和一个 IFrame、两个文档通过 SharedWorker
或两个 worker)直接通信,通过双向通道(或管道)传递消息,每个通道的两端都有一个端口。
概念和用法
使用 MessageChannel()
构造函数创建消息通道。创建后,可以通过 MessageChannel.port1
和 MessageChannel.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 的浏览器中加载。