ServiceWorkerGlobalScope: message イベント
message は ServiceWorkerGlobalScope インターフェイスのイベントで、着信メッセージを受信したときに発生します。 制御されたページは、 ServiceWorker.postMessage() メソッドを使用して、サービスワーカーにメッセージを送信することができます。
サービスワーカーは、任意で、制御されたページに対応する Client.postMessage() を介して返信することができます。
このイベントはキャンセル不可で、バブリングしません。
構文
このイベント名を addEventListener() 等のメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。
js
addEventListener("message", (event) => {});
onmessage = (event) => {};
イベント型
ExtendableMessageEvent です。 ExtendableEvent を継承しています。
イベントプロパティ
親である 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