--- title: Client.postMessage() slug: Web/API/Client/postMessage tags: - API - Client - Method - Reference - Service Workers - Service worker API - ServiceWorker - postMessage translation_of: Web/API/Client/postMessage ---
{{APIRef("Service Worker API")}}
postMessage()
は {{domxref("Client")}} インターフェイスのメソッドで、サービスワーカーがクライアント ({{domxref("Window")}}, {{domxref("Worker")}}, {{domxref("SharedWorker")}}) にメッセージを送信することができます。 メッセージは、 {{domxref("ServiceWorkerContainer", "navigator.serviceWorker")}} の "message
" イベントで受信されます。
client.postMessage(message[, transfer]); client.postMessage(message[, { transfer }]);
message
transfer
{{optional_inline}}undefined
。
サービスワーカーからクライアントへのメッセージの送信
addEventListener('fetch', event => { event.waitUntil(async function() { // クライアントにアクセスできない場合は、早期に終了します。 // 例えば、クロスオリジンの場合。 if (!event.clientId) return; // クライアントを取得します。 const client = await clients.get(event.clientId); // クライアントを取得できない場合は、早期に終了します。 // 例えば、閉じている場合。 if (!client) return; // クライアントにメッセージを送信します。 client.postMessage({ msg: "私はあなたからフェッチされましたよ!", url: event.request.url }); }()); });
そのメッセージの受け取り
navigator.serviceWorker.addEventListener('message', event => { console.log(event.data.msg, event.data.url); });
仕様書 | 状態 | 備考 |
---|---|---|
{{SpecName('Service Workers', '#dom-client-postmessage-message-options', 'postMessage()')}} | {{Spec2('Service Workers')}} | 初回定義 |
{{Compat("api.Client.postMessage")}}