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
postMessage(message)
postMessage(message, transfer)
postMessage(message, options)
Parámetros
message-
El objeto a entregar al worker; estará en el campo
datadel evento entregado al eventomessage. Puede ser cualquier objeto JavaScript procesado por el algoritmo de clonación estructurada.El parámetro
messagees obligatorio. Si los datos a pasar al worker no son importantes, se debe pasarnulloundefinedexplícitamente. transferOpcional-
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.
optionsOpcional-
Un objeto opcional que contiene las siguientes propiedades:
transferOpcional-
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:
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.
// 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
- La interfaz
ServiceWorkera la que pertenece. - Su contraparte, el método
postMessage()que un service worker debe usar para enviar un mensaje de vuelta alServiceWorkerContainerasociado.