L. 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
 */
18
const VERSION = "1.00"
19
20
/**
21
 * Nombre de la carpeta de caché.
22
 */
23
const CACHE = "sincro"
24
25
/**
26
 * Archivos requeridos para que la aplicación funcione fuera de línea.
27
 */
28
const ARCHIVOS = [
29
 "agrega.html",
30
 "index.html",
31
 "modifica.html",
32
 "errors/datosnojson.html",
33
 "errors/eliminadoincorrecto.html",
34
 "errors/errorinterno.html",
35
 "errors/idincorrecto.html",
36
 "errors/modificacionincorrecta.html",
37
 "errors/nombreincorrecto.html",
38
 "errors/resultadonojson.html",
39
 "js/Bd.js",
40
 "js/esperaUnPocoYSincroniza.js",
41
 "js/PASATIEMPO.js",
42
 "js/pasatiempoAgrega.js",
43
 "js/pasatiempoBusca.js",
44
 "js/pasatiempoConsultaNoEliminados.js",
45
 "js/pasatiempoConsultaTodos.js",
46
 "js/pasatiempoElimina.js",
47
 "js/pasatiempoModifica.js",
48
 "js/pasatiemposReemplaza.js",
49
 "js/renderiza.js",
50
 "js/sincroniza.js",
51
 "js/validaPasatiempo.js",
52
 "js/validaPasatiempos.js",
53
 "js/lib/bdConsulta.js",
54
 "js/lib/bdEjecuta.js",
55
 "js/lib/consume.js",
56
 "js/lib/creaIdCliente.js",
57
 "js/lib/enviaJsonRecibeJson.js",
58
 "js/lib/htmlentities.js",
59
 "js/lib/manejaErrores.js",
60
 "js/lib/muestraError.js",
61
 "js/lib/muestraObjeto.js",
62
 "js/lib/ProblemDetailsError.js",
63
 "js/lib/recibeTexto.js",
64
 "js/lib/recibeTextoObligatorio.js",
65
 "js/lib/registraServiceWorker.js",
66
 "js/lib/validaEntidadObligatoria.js",
67
 "/"
68
]
69
70
// Verifica si el código corre dentro de un service worker.
71
if (self instanceof ServiceWorkerGlobalScope) {
72
 // Evento al empezar a instalar el servide worker,
73
 self.addEventListener("install",
74
  (/** @type {ExtendableEvent} */ evt) => {
75
   console.log("El service worker se está instalando.")
76
   evt.waitUntil(llenaElCache())
77
  })
78
79
 // Evento al solicitar información a la red.
80
 self.addEventListener("fetch", (/** @type {FetchEvent} */ evt) => {
81
  if (evt.request.method === "GET") {
82
   evt.respondWith(buscaLaRespuestaEnElCache(evt))
83
  }
84
 })
85
86
 // Evento cuando el service worker se vuelve activo.
87
 self.addEventListener("activate",
88
  () => console.log("El service worker está activo."))
89
}
90
91
async function llenaElCache() {
92
 console.log("Intentando cargar caché:", CACHE)
93
 // Borra todos los cachés.
94
 const keys = await caches.keys()
95
 for (const key of keys) {
96
  await caches.delete(key)
97
 }
98
 // Abre el caché de este service worker.
99
 const cache = await caches.open(CACHE)
100
 // Carga el listado de ARCHIVOS.
101
 await cache.addAll(ARCHIVOS)
102
 console.log("Cache cargado:", CACHE)
103
 console.log("Versión:", VERSION)
104
}
105
106
/** @param {FetchEvent} evt */
107
async function buscaLaRespuestaEnElCache(evt) {
108
 // Abre el caché.
109
 const cache = await caches.open(CACHE)
110
 const request = evt.request
111
 /* Busca la respuesta a la solicitud en el contenido del caché, sin
112
  * tomar en cuenta la parte después del símbolo "?" en la URL. */
113
 const response = await cache.match(request, { ignoreSearch: true })
114
 if (response === undefined) {
115
  /* Si no la encuentra, empieza a descargar de la red y devuelve
116
   * la promesa. */
117
  return fetch(request)
118
 } else {
119
  // Si la encuentra, devuelve la respuesta encontrada en el caché.
120
  return response
121
 }
122
}
skip_previous skip_next