I. 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 = "pwamd"
24
25
/**
26
 * Archivos requeridos para que la aplicación funcione fuera de
27
 * línea.
28
 */
29
const ARCHIVOS = [
30
"ayuda.html",
31
"favicon.ico",
32
"index.html",
33
"site.webmanifest",
34
"css/baseline.css",
35
"css/colors.css",
36
"css/elevation.css",
37
"css/estilos.css",
38
"css/material-symbols-outlined.css",
39
"css/md-filled-button.css",
40
"css/md-filled-text-field.css",
41
"css/md-headline.css",
42
"css/md-list.css",
43
"css/md-outline-button.css",
44
"css/md-tab.css",
45
"css/motion.css",
46
"css/palette.css",
47
"css/roboto.css",
48
"css/shape.css",
49
"css/state.css",
50
"css/transicion_pestanas.css",
51
"css/typography.css",
52
"css/theme/dark.css",
53
"css/theme/light.css",
54
"fonts/MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].codepoints",
55
"fonts/MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].ttf",
56
"fonts/MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].woff2",
57
"fonts/roboto-v32-latin-regular.woff2",
58
"img/icono2048.png",
59
"img/maskable_icon.png",
60
"img/maskable_icon_x128.png",
61
"img/maskable_icon_x192.png",
62
"img/maskable_icon_x384.png",
63
"img/maskable_icon_x48.png",
64
"img/maskable_icon_x512.png",
65
"img/maskable_icon_x72.png",
66
"img/maskable_icon_x96.png",
67
"img/screenshot_horizontal.png",
68
"img/screenshot_vertical.png",
69
"js/nav-tab-fixed.js",
70
"js/lib/ES_APPLE.js",
71
"js/lib/getAttribute.js",
72
"js/lib/manejaErrores.js",
73
"js/lib/muestraError.js",
74
"js/lib/muestraTextoDeAyuda.js",
75
"js/lib/ProblemDetailsError.js",
76
"js/lib/querySelector.js",
77
"js/lib/registraServiceWorker.js",
78
"js/lib/resaltaSiEstasEn.js",
79
"js/lib/custom/md-app-bar.js",
80
"ungap/custom-elements.js",
81
 "/"
82
]
83
84
// Verifica si el código corre dentro de un service worker.
85
if (self instanceof ServiceWorkerGlobalScope) {
86
 // Evento al empezar a instalar el servide worker,
87
 self.addEventListener("install",
88
  (/** @type {ExtendableEvent} */ evt) => {
89
   console.log("El service worker se está instalando.")
90
   evt.waitUntil(llenaElCache())
91
  })
92
93
 // Evento al solicitar información a la red.
94
 self.addEventListener("fetch", (/** @type {FetchEvent} */ evt) => {
95
  if (evt.request.method === "GET") {
96
   evt.respondWith(buscaLaRespuestaEnElCache(evt))
97
  }
98
 })
99
100
 // Evento cuando el service worker se vuelve activo.
101
 self.addEventListener("activate",
102
  () => console.log("El service worker está activo."))
103
}
104
105
async function llenaElCache() {
106
 console.log("Intentando cargar caché:", CACHE)
107
 // Borra todos los cachés.
108
 const keys = await caches.keys()
109
 for (const key of keys) {
110
  await caches.delete(key)
111
 }
112
 // Abre el caché de este service worker.
113
 const cache = await caches.open(CACHE)
114
 // Carga el listado de ARCHIVOS.
115
 await cache.addAll(ARCHIVOS)
116
 console.log("Cache cargado:", CACHE)
117
 console.log("Versión:", VERSION)
118
}
119
120
/** @param {FetchEvent} evt */
121
async function buscaLaRespuestaEnElCache(evt) {
122
 // Abre el caché.
123
 const cache = await caches.open(CACHE)
124
 const request = evt.request
125
 /* Busca la respuesta a la solicitud en el contenido del caché, sin
126
  * tomar en cuenta la parte después del símbolo "?" en la URL. */
127
 const response = await cache.match(request, { ignoreSearch: true })
128
 if (response === undefined) {
129
  /* Si no la encuentra, empieza a descargar de la red y devuelve
130
   * la promesa. */
131
  return fetch(request)
132
 } else {
133
  // Si la encuentra, devuelve la respuesta encontrada en el caché.
134
  return response
135
 }
136
}
skip_previous skip_next