--- 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")}}