Esta página ha sido traducida del inglés por la comunidad. Aprende más y únete a la comunidad de MDN Web Docs.

View in English Always switch to English

ServiceWorker: método postMessage()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since abril de 2018.

Contexto seguro: Esta función está disponible solo en contextos seguros (HTTPS), en algunos o todos los navegadores que lo soportan.

Nota: Esta característica está disponible en Web Workers.

El método postMessage() de la interfaz ServiceWorker envía un mensaje al worker. El primer parámetro son los datos a enviar al worker. Los datos pueden ser cualquier objeto JavaScript que pueda ser procesado por el algoritmo de clonación estructurada.

El service worker puede enviar información de vuelta a sus clientes usando el método postMessage(). El mensaje no se enviará de vuelta a este objeto ServiceWorker, sino al ServiceWorkerContainer asociado disponible a través de navigator.serviceWorker.

Sintaxis

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

Parámetros

message

El objeto a entregar al worker; estará en el campo data del evento entregado al evento message. Puede ser cualquier objeto JavaScript procesado por el algoritmo de clonación estructurada.

El parámetro message es obligatorio. Si los datos a pasar al worker no son importantes, se debe pasar null o undefined explícitamente.

transfer Opcional

Un arreglo opcional de objetos transferibles para transferir su propiedad. La propiedad de estos objetos se transfiere al lado destino y ya no se pueden usar en el lado emisor. Estos objetos transferibles deben estar adjuntos al mensaje; de lo contrario, se moverían pero no serían accesibles en el extremo receptor.

options Opcional

Un objeto opcional que contiene las siguientes propiedades:

transfer Opcional

Tiene el mismo significado que el parámetro transfer.

Valor de retorno

Ninguno (undefined).

Excepciones

SyntaxError

Se lanza si no se proporciona el parámetro message.

Ejemplos

En este ejemplo se crea un ServiceWorker y se envía un mensaje inmediatamente:

js
navigator.serviceWorker.register("service-worker.js");

navigator.serviceWorker.ready.then((registration) => {
  registration.active.postMessage(
    "Mensaje de prueba enviado inmediatamente después de la creación",
  );
});

Para recibir el mensaje, el service worker, en service-worker.js, debe escuchar el evento message en su ámbito global.

js
// Esto debe estar en `service-worker.js`
addEventListener("message", (event) => {
  console.log(`Mensaje recibido: ${event.data}`);
});

Ten en cuenta que el service worker puede enviar mensajes de vuelta al hilo principal usando el método postMessage(). Para recibirlo, el hilo principal necesita escuchar un evento message en el objeto ServiceWorkerContainer.

Especificaciones

Specification
Service Workers Nightly
# dom-serviceworker-postmessage
Service Workers Nightly
# dom-serviceworker-postmessage-message-options

Compatibilidad con navegadores

Véase también