`//Asignar nombre a cache y version
const CACHE_NAME = 'v2_cache_satlife_radio',
urlsToCache = [
'./',
'./config.webmanifest.json',
'./images/logo.png',
'./images/logo.svg',
'./images/avatar.jpg',
'./images/banner.jpg',
'./images/pic01.jpg',
'./images/pic02.jpg',
'./images/pic03.jpg',
'./images/pic04.jpg',
'./images/pic05.jpg',
'./images/pic06.jpg',
'./images/pic07.jpg',
'./images/pic08.jpg',
'./images/pic09.jpg',
'./images/pic10.jpg',
'./images/pic11.jpg',
'./images/pic12.jpg',
'./assets/css/main.css',
'./assets/css/satliferadio-page.css',
'./assets/css/satliferadio-player.css',
'./assets/js/satliferadio-player.js',
'./assets/js/jquery.min.js',
'./assets/js/jquery.scrolly.min.js',
'./assets/js/jquery.scrollex.min.js',
'./assets/js/browser.min.js',
'./assets/js/breakpoints.min.js',
'./assets/js/util.js',
'./assets/js/main.js',
'./webplayer/css/jquery.mCustomScrollbar.css',
'./webplayer/css/artwork5.css',
'./webplayer/js/jquery-3.2.1.min.js',
'./webplayer/js/jquery.mCustomScrollbar.concat.min.js',
'./webplayer/js/new.js',
'./webplayer/data/default_artwork/podcast.png',
'./webplayer/data/default_artwork/star.png',
'./webplayer/data/default_artwork/star_small.png',
'./webplayer/data/pattern/art.jpg',
'./webplayer/data/pattern/bg9.jpg',
'./webplayer/data/stations/classichist.jpg',
'./webplayer/data/stations/dimension.jpg',
'./webplayer/data/stations/discover.png',
'./webplayer/data/stations/discover2.png',
'./webplayer/data/stations/elektroxploit.jpg',
'./webplayer/data/stations/hitlist.png',
'./webplayer/data/stations/horizonte.jpg',
'./webplayer/data/stations/on_the_road.jpg',
'./webplayer/data/stations/rocklife1.jpg',
'./webplayer/data/stations/signos.jpg',
'./webplayer/data/stations/the_beat_street.jpg',
'./webplayer/data/stations/trap_motion.jpg',
'./webplayer/data/stations/y2k.jpg'
]
//durante la fase de instalación, generalmente se almacena en caché los activos estáticos
self.addEventListener('install', e => {
e.waitUntil(
caches.open(CACHE_NAME)
.then(cache => {
return cache.addAll(urlsToCache)
.then(() => self.skipWaiting())
})
.catch(err => console.log('Falló registro de cache', err))
)
})
//una vez que se instala el SW, se activa y busca los recursos para hacer que funcione sin conexión
self.addEventListener('activate', e => {
const cacheWhitelist = [CACHE_NAME]
e.waitUntil(
caches.keys()
.then(cacheNames => {
return Promise.all(
cacheNames.map(cacheName => {
//Eliminamos lo que ya no se necesita en cache
if (cacheWhitelist.indexOf(cacheName) === -1) {
return caches.delete(cacheName)
}
})
)
})
// Le indica al SW activar el cache actual
.then(() => self.clients.claim())
)
})
//cuando el navegador recupera una url
self.addEventListener('fetch', e => {
//Responder ya sea con el objeto en caché o continuar y buscar la url real
e.respondWith(
caches.match(e.request)
.then(res => {
if (res) {
//recuperar del cache
return res
}
//recuperar de la petición a la url
return fetch(e.request)
})
)
})`