En un trabajador de servicio, la interfaz del cliente tiene postMessage() para hablar con los clientes, que pueden ser del tipo "window" , "worker" o "sharedworker" .
En los clientes de "window" , el evento de mensaje se envía a navigator.serviceWorker.controller . Ejemplo de código de trabajador de servicio:
const windowClients = await clients.matchAll({ type: "window" }); windowClients[0].postMessage('Send this message to window.navigator.serviceWorker.controller'); Pero en los clientes de trabajadores compartidos, navigator.serviceWorker no parece existir. (Esto parece cambiar en un borrador de especificación . Editar: Y Safari ).
const sharedWorkerClients = await clients.matchAll({ type: "sharedworker" }); sharedWorkerClients[0].postMessage('Send this message to ???'); Entonces, ¿dónde se envía el evento de mensaje en el trabajador compartido? ¿O postMessage() no funciona aquí?
(Hay soluciones alternativas, como hacer que el documento transfiera SharedWorker#port al service worker. Me pregunto si hay una forma de enviar mensajes directamente).