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

另見