Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

216
Vistas
Los eventos 'activar' y 'mensaje' de serviceWorker no se activan

Estoy tratando de usar serviceWorkers por primera vez y, aunque comenzó bien, estoy un poco atascado.

Aquí está mi muy simple service-worker.js :

 self.addEventListener('install', () => { console.log('Hello world from the Service worker') }) self.addEventListener('activate', () => { console.log('Serive worker now active') }) self.addEventListener('message', event => { console.log('Service worker received message ' + JSON.stringify(event)) })

Me registro para el trabajador de servicio así:

 useEffect(() => { if ('serviceWorker' in navigator) { navigator.serviceWorker .register('/service-worker.js') .then(() => { console.log('Service worker registration successful') }) .catch(e => { console.error('Service worker registration failed: ' + e) }) } }, [])

Mientras cargo mi aplicación, obtengo los siguientes registros:

 Service worker registration successful // APP Hello world from the Service worker // SERVICE WORKER install event

Entonces, recibo el evento de install llamado, pero no el evento de activate .

Además, cuando envío un mensaje al trabajador del servicio desde mi aplicación:

 navigator.serviceWorker.controller.postMessage({test: 'test'})

el evento de message en el trabajador del servicio tampoco se llama ...

¿Hay algo mal que estoy haciendo? ¿El trabajador del servicio no se activa de alguna manera?

Para contexto adicional, mi aplicación usa Next.js y coloco service-worker.js en la carpeta public de mi proyecto.

Además, en la aplicación, si intento publicar el mensaje como este:

 navigator.serviceWorker.ready.then(registration => { console.log(registration.active) registration.active.postMessage({test: 'test'}) })

Me registra la instancia del trabajador del servicio, (supongo) lo que significa que el trabajador del servicio está realmente activo/listo.

about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

ServiceWorkerRegistration.active no está disponible de inmediato, por lo que la instancia debe obtenerse con la installing o waiting primero. skipWaiting() podría usarse cuando el SW se actualiza/modifica desde la última instalación.

 // main.js navigator.serviceWorker?.register('./service-worker.js') .then(reg => { console.log('registered', reg) const sw = reg.installing || reg.waiting || reg.active sw.postMessage({ milliseconds: Date.now() }) }) .catch(() => console.error('registration failed'))
 // service-worker.js self.addEventListener('install', e => { console.log(e.type) self.skipWaiting() // always activate updated SW immediately }) self.addEventListener('activate', e => console.log(e.type)) self.addEventListener('message', e => console.log(e.type, e.data))
about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda