MessagePort:postMessage() 方法
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年9月.
备注: 此特性在 Web Worker 中可用。
MessagePort 接口的 postMessage() 方法从端口发送一条消息,可以将对象所有权转移给其他浏览上下文。
语法
postMessage(message) postMessage(message, transfer) postMessage(message, options) 参数
message-
需要通过 channel 发送的消息。可以是任何基本数据类型。多个数据项可以作为数组发送。
transfer可选-
一个包含要转让所有权的可转移对象的可选的数组。这些对象的所有权将转移到接收方,发送方将不能再使用它们。这些可转移对象应附加到消息中;否则它们将被转移,但实际上在接收方无法访问。
options可选-
包含以下属性的可选对象:
transfer可选-
与
transfer参数含义相同。
返回值
无(undefined)。
示例
在以下代码块中,你可以看到使用 MessageChannel() 构造函数创建了一个新的 channel。当 IFrame 加载完成后,我们使用 window.postMessage 中的 MessageChannel.port2 以及一条消息传递给 IFrame。IFrame 接收消息,并使用 MessageChannel 中的 postMessage() 上发送回上一条消息。
handleMessage 处理程序使用 onmessage 对从 iframe 发回的消息作出响应,并将其放入段落中;MessageChannel.port1 监听了 onmessage 事件,以检查消息何时到达。
const channel = new MessageChannel(); const para = document.querySelector("p"); const ifr = document.querySelector("iframe"); const otherWindow = ifr.contentWindow; ifr.addEventListener("load", iframeLoaded, false); function iframeLoaded() { otherWindow.postMessage("传输信息端口", "*", [channel.port2]); } channel.port1.onmessage = handleMessage; function handleMessage(e) { para.innerHTML = e.data; } // 在 iframe 中... window.addEventListener("message", (event) => { const messagePort = event.ports?.[0]; messagePort.postMessage("你好,来自 iframe!"); }); 要查看可运行的完整示例,参考我们在 Github 上的 channel messaging 基础演示(也可以在线运行)。
规范
| Specification |
|---|
| HTML> # dom-messageport-postmessage-dev> |
浏览器兼容性
Loading…