files/en-us/web/api/serviceworker/postmessage/index.md
{{APIRef("Service Workers API")}}{{securecontext_header}}{{AvailableInWorkers}}
The postMessage() method of the {{domxref("ServiceWorker")}} interface sends a message to the worker. The first parameter is the data to send to the worker. The data may be any JavaScript object which can be handled by the structured clone algorithm.
The service worker can send back information to its clients by using the {{domxref("Client.postMessage", "postMessage()")}} method. The message will not be sent back to this ServiceWorker object but to the associated {{domxref("ServiceWorkerContainer")}} available via {{domxref("navigator.serviceWorker")}}.
postMessage(message)
postMessage(message, transfer)
postMessage(message, options)
message
: The object to deliver to the worker; this will be in the data field in the event delivered to the {{domxref("ServiceWorkerGlobalScope.message_event", "message")}} event. This may be any JavaScript object handled by the structured clone algorithm.
The message parameter is mandatory. If the data to be passed to the worker is unimportant, null or undefined must be passed explicitly.
[!NOTE] A service worker is not in the same agent cluster as its client, and therefore cannot share memory. {{jsxref("SharedArrayBuffer")}} objects, or buffer views backed by one, cannot be posted across agent clusters. Trying to do so will generate a {{domxref("BroadcastChannel/messageerror_event", "messageerror")}} event containing a
DataCloneError{{domxref("DOMException")}} on the receiving end.
transfer {{optional_inline}}
options {{optional_inline}}
transfer {{optional_inline}}
transfer parameter.None ({{jsxref("undefined")}}).
message parameter is not provided.In this example a {{domxref("ServiceWorker")}} is created and a message is immediately sent:
navigator.serviceWorker.register("service-worker.js");
navigator.serviceWorker.ready.then((registration) => {
registration.active.postMessage(
"Test message sent immediately after creation",
);
});
In order to receive the message, the service worker, in service-worker.js has to listen to the {{domxref("ServiceWorkerGlobalScope.message_event", "message")}} event on its global scope.
// This must be in `service-worker.js`
addEventListener("message", (event) => {
console.log(`Message received: ${event.data}`);
});
Note that the service worker can send back messages to the main thread using the {{domxref("Client.postMessage()", "postMessage()")}} method. To receive it, the main thread needs to listen for a {{domxref("ServiceWorkerContainer.message_event", "message")}} event on the {{domxref("ServiceWorkerContainer")}} object.
{{Specifications}}
{{Compat}}