Tengo este código en mi trabajador de servicio:
messaging.onBackgroundMessage(function (payload) { console.log("onBackgroundMessage email and contact_link:"); console.log(payload.data.email,payload.data.contact_link); self.clients.matchAll().then(clients => { clients.forEach(client => client.postMessage({ msg: "This is a message from the SW", email: payload.data.email, contact_link: payload.data.contact_link })); }) });Tengo este código en el cliente:
navigator.serviceWorker.addEventListener('message', payload => { console.log("Message from ServiceWorker"); console.log(payload.data.msg, payload.data.email, payload.data.contact_link); });Recibo los datos correctamente en la consola del trabajador del servicio, sin embargo, la consola del cliente dice que todos los datos no están definidos. ¿Por qué es eso, qué estoy haciendo mal?
Todavía no sé por qué no funciona, pero usé este código en el servidor:
const channel = new BroadcastChannel('sw-messages'); channel.postMessage(payload.data);Y este código en el cliente en su lugar:
const channel = new BroadcastChannel('sw-messages'); channel.addEventListener('message', event => { console.log('Received:', event.data); });Funciona bien.