--- title: ExtendableMessageEvent slug: Web/API/ExtendableMessageEvent tags: - API - ExtendableMessageEvent - Interface - Reference - Service Workers translation_of: Web/API/ExtendableMessageEvent ---
Service Worker API の ExtendableMessageEvent インターフェイスは、(別のコンテキストからのメッセージを {{domxref("ServiceWorkerGlobalScope")}} で受信した時に)サービスワーカーで発生する {{event("message_(ServiceWorker)","message")}} イベントのイベントオブジェクトを表し、このようなイベントの存続期間を延長します。
このインターフェイスは、{{domxref("ExtendableEvent")}} インターフェイスを継承しています。
ExtendableMessageEvent オブジェクトのインスタンスを作成します。親の {{domxref("ExtendableEvent")}} からプロパティを継承します。
親の {{domxref("ExtendableEvent")}} からメソッドを継承します。
以下の例では、ページが {{domxref("ServiceWorkerRegistration.active")}} を介して {{domxref("ServiceWorker")}} オブジェクトへのハンドルを取得し、その postMessage() 関数を呼び出します。
// 制御されているページ内
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 イベントをリッスンしてメッセージを受信できます。
// サービスワーカー内
addEventListener('message', event => {
// event は ExtendableMessageEvent オブジェクトです
console.log(`The client sent me a message: ${event.data}`);
event.source.postMessage("Hi client");
});
| 仕様 | 状態 | コメント |
|---|---|---|
| {{SpecName('Service Workers', '#extendablemessageevent', 'ExtendableMessageEvent')}} | {{Spec2('Service Workers')}} | 初期定義 |
{{Compat("api.ExtendableMessageEvent")}}