docs.rodeo

MDN Web Docs mirror

Client: postMessage() method

{{APIRef("Service Worker API")}} {{AvailableInWorkers("service")}} 

The postMessage() method of the {{domxref("Client")}}  interface allows a service worker to send a message to a client (a {{domxref("Window")}} , {{domxref("Worker")}} , or {{domxref("SharedWorker")}} ). The message is received in the message event on {{domxref("ServiceWorkerContainer", "navigator.serviceWorker")}} .

Syntax

postMessage(message)
postMessage(message, transfer)
postMessage(message, options)

Parameters

Return value

None ({{jsxref("undefined")}} ).

Examples

The code below sends a message from a service worker to a client. The client is fetched using the {{domxref("Clients.get()", "get()")}}  method on {{domxref("ServiceWorkerGlobalScope.clients", "clients")}} , which is a global in service worker scope.

addEventListener("fetch", (event) => {
  event.waitUntil(
    (async () => {
      // Exit early if we don't have access to the client.
      // Eg, if it's cross-origin.
      if (!event.clientId) return;

      // Get the client.
      const client = await self.clients.get(event.clientId);
      // Exit early if we don't get the client.
      // Eg, if it closed.
      if (!client) return;

      // Send a message to the client.
      client.postMessage({
        msg: "Hey I just got a fetch from you!",
        url: event.request.url,
      });
    })(),
  );
});

Receiving that message:

navigator.serviceWorker.addEventListener("message", (event) => {
  console.log(event.data.msg, event.data.url);
});

Specifications

{{Specifications}} 

Browser compatibility

{{Compat}} 

In this article

View on MDN