Estoy tratando de registrar un trabajador de servicio así:
navigator.serviceWorker.register("/static/sw.js", {scope: "/blogs"}); Con el objetivo de realizar solicitudes para llenar el caché durante el paso de install , así:
cache.addAll([ "/main.css", "/logo.png" ]);las solicitudes se realizarían y se guardarían en la memoria caché como:
<website origin>/blogs/main.css <website origin>/blogs/logo.png Sin embargo, aunque el alcance del registro parece ser correcto (ServiceWorker en la pestaña Aplicación de las herramientas de desarrollo del navegador muestra la ruta correcta), las solicitudes realizadas no incluyen la parte /blogs .
En este escenario, no puedo codificar la parte /blogs de la solicitud en cache.addAll porque el valor cambiará según la etapa de implementación. El SW no sabrá el valor que se establecerá en scope , pero la ventana sí.
Pensé que las solicitudes que provienen de un ServiceWorker tendrán que pasar por el alcance establecido en el registro, pero ese no parece ser el caso.
Si omito / en addAll , las solicitudes se realizan así:
<website origin>/static/main.css <website origin>/static/logo.pngya que /static es donde reside Service Worker y, actualmente, preferiría no moverlo a /blogs si no es necesario.
Puede acceder a este valor de alcance desde su ServiceWorker al verificar el valor self.registration.scope .
A partir de ahí, todo lo que tiene que hacer es convertir las URL relativas de sus activos en absolutas utilizando este valor.
cache.addAll([ "./main.css", "./logo.png" ] // make them relative to the SW's scope .map((url) => new URL(url, registration.scope)) );