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
 */
18
const VERSION = "4.01"
19
20
/** Nombre del archivo de cache. */
21
const CACHE = "ejemploPWA"
22
23
/**
24
 * Archivos requeridos para que la aplicación funcione fuera de
25
 * línea.
26
 */
27
const ARCHIVOS = [
28
 "favicon.ico",
29
 "index.html",
30
 "jsconfig.json",
31
 "site.webmanifest",
32
 "css/estilos.css",
33
 "img/icono2048.png",
34
 "img/maskable_icon.png",
35
 "img/maskable_icon_x128.png",
36
 "img/maskable_icon_x192.png",
37
 "img/maskable_icon_x384.png",
38
 "img/maskable_icon_x48.png",
39
 "img/maskable_icon_x512.png",
40
 "img/maskable_icon_x72.png",
41
 "img/maskable_icon_x96.png",
42
 "img/screenshot_horizontal.png",
43
 "img/screenshot_vertical.png",
44
 "js/lib/registraServiceWorker.js",
45
 "/"
46
]
47
48
// Verifica si el código corre dentro de un service worker.
49
if (self instanceof ServiceWorkerGlobalScope) {
50
 // Evento al empezar a instalar el servide worker,
51
 self.addEventListener("install",
52
  (/** @type {ExtendableEvent} */ evt) => {
53
   console.log("El service worker se está instalando.")
54
   evt.waitUntil(llenaElCache())
55
  })
56
57
 // Evento al solicitar información a la red.
58
 self.addEventListener("fetch", (/** @type {FetchEvent} */ evt) => {
59
  if (evt.request.method === "GET") {
60
   evt.respondWith(buscaLaRespuestaEnElCache(evt))
61
  }
62
 })
63
64
 // Evento cuando el service worker se vuelve activo.
65
 self.addEventListener("activate",
66
  () => console.log("El service worker está activo."))
67
}
68
69
async function llenaElCache() {
70
 console.log("Intentando cargar caché:", CACHE)
71
 // Borra todos los cachés.
72
 const keys = await caches.keys()
73
 for (const key of keys) {
74
  await caches.delete(key)
75
 }
76
 // Abre el caché de este service worker.
77
 const cache = await caches.open(CACHE)
78
 // Carga el listado de ARCHIVOS.
79
 await cache.addAll(ARCHIVOS)
80
 console.log("Cache cargado:", CACHE)
81
 console.log("Versión:", VERSION)
82
}
83
84
/** @param {FetchEvent} evt */
85
async function buscaLaRespuestaEnElCache(evt) {
86
 // Abre el caché.
87
 const cache = await caches.open(CACHE)
88
 const request = evt.request
89
 /* Busca la respuesta a la solicitud en el contenido del caché, sin
90
  * tomar en cuenta la parte después del símbolo "?" en la URL. */
91
 const response = await cache.match(request, { ignoreSearch: true })
92
 if (response === undefined) {
93
  /* Si no la encuentra, empieza a descargar de la red y devuelve
94
   * la promesa. */
95
  return fetch(request)
96
 } else {
97
  // Si la encuentra, devuelve la respuesta encontrada en el caché.
98
  return response
99
 }
100
}
skip_previous skip_next