MessagePort

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 2015 年 9 月以來,該特性已在各大瀏覽器中可用。

注意:此功能在 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 處理程式,並透過 window.postMessage 方法將 MessageChannel.port2 與一條訊息一起傳輸到 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
# message-ports

瀏覽器相容性

另見