K. sw.js

1/* Este archivo debe estar colocado en la carpeta raíz del sitio.
2 *
3 * Cualquier cambio en el contenido de este archivo hace que el service
4 * worker se reinstale. */
5
6/**
7 * Cambia el número de la versión cuando cambia el contenido de los
8 * archivos.
9 *
10 * El número a la izquierda del punto (.), en este caso <q>1</q>, se
11 * conoce como número mayor y se cambia cuando se realizan
12 * modificaciones grandes o importantes.
13 *
14 * El número a la derecha del punto (.), en este caso <q>00</q>, se
15 * conoce como número menor y se cambia cuando se realizan
16 * modificaciones menores.
17 */
18const VERSION = "1.00"
19
20/**
21 * Nombre de la carpeta de caché.
22 */
23const CACHE = "sincro"
24
25/**
26 * Archivos requeridos para que la aplicación funcione fuera de línea.
27 */
28const ARCHIVOS = [
29 "agrega.html",
30"index.html",
31"modifica.html",
32"error/datosnojson.html",
33"error/eliminadoincorrecto.html",
34"error/errorinterno.html",
35"error/faltaid.html",
36"error/faltanombre.html",
37"error/idincorrecto.html",
38"error/modificacionincorrecta.html",
39"error/nombreenblanco.html",
40"error/nombreincorrecto.html",
41"error/resultadonojson.html",
42"js/esperaUnPocoYSincroniza.js",
43"js/registraServiceWorker.js",
44"js/renderiza.js",
45"js/sincroniza.js",
46"js/bd/Bd.js",
47"js/bd/pasatiempoAgrega.js",
48"js/bd/pasatiempoBusca.js",
49"js/bd/pasatiempoConsultaNoEliminados.js",
50"js/bd/pasatiempoConsultaTodos.js",
51"js/bd/pasatiempoElimina.js",
52"js/bd/pasatiempoModifica.js",
53"js/bd/pasatiemposReemplaza.js",
54"js/modelo/PASATIEMPO.js",
55"js/modelo/validaId.js",
56"js/modelo/validaNombre.js",
57"js/modelo/validaPasatiempo.js",
58"js/modelo/validaPasatiempos.js",
59"lib/js/bdConsulta.js",
60"lib/js/bdEjecuta.js",
61"lib/js/consumeJson.js",
62"lib/js/creaIdCliente.js",
63"lib/js/enviaJson.js",
64"lib/js/exportaAHtml.js",
65"lib/js/htmlentities.js",
66"lib/js/muestraError.js",
67"lib/js/muestraObjeto.js",
68"lib/js/ProblemDetails.js",
69 "/"
70]
71
72// Verifica si el código corre dentro de un service worker.
73if (self instanceof ServiceWorkerGlobalScope) {
74 // Evento al empezar a instalar el servide worker,
75 self.addEventListener("install",
76 (/** @type {ExtendableEvent} */ evt) => {
77 console.log("El service worker se está instalando.")
78 evt.waitUntil(llenaElCache())
79 })
80
81 // Evento al solicitar información a la red.
82 self.addEventListener("fetch", (/** @type {FetchEvent} */ evt) => {
83 if (evt.request.method === "GET") {
84 evt.respondWith(buscaLaRespuestaEnElCache(evt))
85 }
86 })
87
88 // Evento cuando el service worker se vuelve activo.
89 self.addEventListener("activate",
90 () => console.log("El service worker está activo."))
91}
92
93async function llenaElCache() {
94 console.log("Intentando cargar caché:", CACHE)
95 // Borra todos los cachés.
96 const keys = await caches.keys()
97 for (const key of keys) {
98 await caches.delete(key)
99 }
100 // Abre el caché de este service worker.
101 const cache = await caches.open(CACHE)
102 // Carga el listado de ARCHIVOS.
103 await cache.addAll(ARCHIVOS)
104 console.log("Cache cargado:", CACHE)
105 console.log("Versión:", VERSION)
106}
107
108/** @param {FetchEvent} evt */
109async function buscaLaRespuestaEnElCache(evt) {
110 // Abre el caché.
111 const cache = await caches.open(CACHE)
112 const request = evt.request
113 /* Busca la respuesta a la solicitud en el contenido del caché, sin
114 * tomar en cuenta la parte después del símbolo "?" en la URL. */
115 const response = await cache.match(request, { ignoreSearch: true })
116 if (response === undefined) {
117 /* Si no la encuentra, empieza a descargar de la red y devuelve
118 * la promesa. */
119 return fetch(request)
120 } else {
121 // Si la encuentra, devuelve la respuesta encontrada en el caché.
122 return response
123 }
124}
skip_previous skip_next