ExtendableMessageEvent

Baseline 已廣泛支援

此功能已成熟,可跨多種裝置和瀏覽器版本工作。它自 ⁨2018 年 4 月⁩ 起已在所有瀏覽器中可用。

注意:此功能僅在 Service Workers 中可用。

ExtendableMessageEvent 介面是 Service Worker API 的一部分,它代表了在 Service Worker 上觸發的 message 事件的事件物件(當 Service Worker 的 ServiceWorkerGlobalScope 從另一個上下文接收到訊息時)——它擴充套件了此類事件的生命週期。

此介面繼承自 ExtendableEvent 介面。

Event ExtendableEvent ExtendableMessageEvent

建構函式

ExtendableMessageEvent()

建立新的 ExtendableMessageEvent 物件例項。

例項屬性

繼承自其父級 ExtendableEvent 的屬性.

ExtendableMessageEvent.data 只讀

返回事件的資料。它可以是任何資料型別。如果分發在 messageerror 事件中,則該屬性將為 null

ExtendableMessageEvent.origin 只讀

返回傳送訊息的 Client 的來源。

ExtendableMessageEvent.lastEventId 只讀

Server-Sent Events 中,表示事件源的最後一個事件 ID。

ExtendableMessageEvent.source 只讀

返回傳送訊息的 Client 物件的引用。

ExtendableMessageEvent.ports 只讀

返回包含代表關聯訊息通道的埠的 MessagePort 物件的陣列。

例項方法

繼承自其父級 ExtendableEvent 的方法.

示例

在下面的示例中,一個頁面透過 ServiceWorkerRegistration.active 獲取了 ServiceWorker 物件的控制代碼,然後呼叫了它的 postMessage() 函式。

js
// in the page being controlled
if (navigator.serviceWorker) {
  navigator.serviceWorker.register("service-worker.js");

  navigator.serviceWorker.addEventListener("message", (event) => {
    // event is a MessageEvent object
    console.log(`The service worker sent me a message: ${event.data}`);
  });

  navigator.serviceWorker.ready.then((registration) => {
    registration.active.postMessage("Hi service worker");
  });
}

Service Worker 可以透過監聽 message 事件來接收訊息

js
// in the service worker
addEventListener("message", (event) => {
  // event is an ExtendableMessageEvent object
  console.log(`The client sent me a message: ${event.data}`);

  event.source.postMessage("Hi client");
});

規範

規範
Service Workers
# extendablemessageevent-interface

瀏覽器相容性

另見