Soy nuevo en Service Worker, traté de escribir un código para aprender a usar Service Worker en mi aplicación Next.js, pero encontré algunos problemas con el controlador de eventos de búsqueda, por alguna razón, el controlador de eventos de búsqueda no se ejecuta al registrar el servicio. trabajador por primera vez, pero cuando actualizo la página, el controlador de eventos funciona bien y no sé por qué, esta es la estructura de carpetas públicas de mi aplicación:
/public /assets /icons manifest.json service-worker.js service-worker-registration.jsmanifiesto.js:
{ "name": "FakeHulu", "short_name": "FakeHulu", "description": "My Own version of Hulu", "icons": [ { "src": "/icons/manifest-icon-192.maskable.png", "sizes": "192x192", "type": "image/png", "purpose": "any" }, ... ], "theme_color": "#ffffff", "background_color": "#ffffff", "start_url": "/", "display": "fullscreen", "orientation": "portrait" }servicio-trabajador-registro.js:
if("serviceWorker" in navigator){ window.navigator.serviceWorker.register("/service-worker.js", { scope: '/' }).then(sw => console.log("serviceWorker Supported and register")) }trabajador-servicio.js:
self.addEventListener("install" , evt => { evt.waitUntil(caches.open("main_cache").then(cache => cache.addAll(["/", "/something"]))); self.skipWaiting(); }); self.addEventListener("activate" , evt => { console.log(evt); clients.claim(); }); self.addEventListener("fetch" , evt => { console.log(evt); });En su primera carga, el orden de operación es este:
Tenga en cuenta que no hay un controlador fetch() para ejecutar cuando se descargan su cliente y el trabajador de servicio porque el trabajador de servicio aún no se ha instalado.
Al recargar, el orden es este:
Fetch() en el trabajador de servicio existente intercepta la solicitud y decide si recuperar el recurso solicitado de un recurso local o de la red.