ServiceWorkerGlobalScope: message イベント

messageServiceWorkerGlobalScope インターフェイスのイベントで、着信メッセージを受信したときに発生します。 制御されたページは、 ServiceWorker.postMessage() メソッドを使用して、サービスワーカーにメッセージを送信することができます。 サービスワーカーは、任意で、制御されたページに対応する Client.postMessage() を介して返信することができます。

このイベントはキャンセル不可で、バブリングしません。

構文

このイベント名を addEventListener() 等のメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。

js
addEventListener("message", (event) => {});

onmessage = (event) => {};

イベント型

イベントプロパティ

親である ExtendableEvent からプロパティを継承しています

ExtendableMessageEvent.data 読取専用

イベントのデータを返します。任意のデータ型にすることができます。

ExtendableMessageEvent.origin 読取専用

メッセージを送信した Client のオリジンを返します。

ExtendableMessageEvent.lastEventId 読取専用

サーバー送信イベントにおいて、イベントソースの最後のイベント ID を表します。これは空文字列です。

ExtendableMessageEvent.source 読取専用

メッセージを送信した Client オブジェクトへの参照を返します。

ExtendableMessageEvent.ports 読取専用

関連するメッセージチャネルのポートを表す MessagePort オブジェクトを含む配列を返します。

以下の例では、ページが ServiceWorkerRegistration.active を介して ServiceWorker オブジェクトへのハンドルを取得し、その postMessage() 関数を呼び出します。

js
// 制御されているページ内
if (navigator.serviceWorker) {
  navigator.serviceWorker.register("service-worker.js");

  navigator.serviceWorker.addEventListener("message", (event) => {
    // event は MessageEvent オブジェクトです
    console.log(`The service worker sent me a message: ${event.data}`);
  });

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

サービスワーカーは、次のようにして "message" イベントを待ち受けすることでメッセージを受け取ることができます。

js
// サービスワーカー内
addEventListener("message", (event) => {
  // event は ExtendableMessageEvent オブジェクトです
  console.log(`The client sent me a message: ${event.data}`);

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

また、スクリプトは onmessage を使用してメッセージを待ち受けすることもできます。

js
// service-worker.js
self.onmessage = (event) => {
  // event は ExtendableMessageEvent オブジェクトです
  console.log(`The client sent me a message: ${event.data}`);

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

仕様書

Specification
Service Workers
# eventdef-serviceworkerglobalscope-message
Service Workers
# dom-serviceworkerglobalscope-onmessage

ブラウザーの互換性

BCD tables only load in the browser

関連情報