mirror of
https://github.com/marcrobledo/savegame-editors.git
synced 2025-04-24 16:35:10 +00:00
68 lines
2.3 KiB
JavaScript
68 lines
2.3 KiB
JavaScript
/*
|
|
Cache Service Worker template by mrc 2019
|
|
mostly based in:
|
|
https://github.com/GoogleChrome/samples/blob/gh-pages/service-worker/basic/service-worker.js
|
|
https://github.com/chriscoyier/Simple-Offline-Site/blob/master/js/service-worker.js
|
|
https://gist.github.com/kosamari/7c5d1e8449b2fbc97d372675f16b566e
|
|
|
|
Note for GitHub Pages:
|
|
there can be an unexpected behaviour (cache not updating) when site is accessed from
|
|
https://user.github.io/repo/ (without index.html) in some browsers (Firefox)
|
|
use absolute paths if hosted in GitHub Pages in order to avoid it
|
|
also invoke sw with an absolute path:
|
|
navigator.serviceWorker.register('/repo/_cache_service_worker.js', {scope: '/repo/'})
|
|
*/
|
|
|
|
|
|
var PRECACHE_ID='super-kirby-clash-editor';
|
|
var PRECACHE_VERSION='v3';
|
|
var PRECACHE_URLS=[
|
|
'/savegame-editors/super-kirby-clash/','/savegame-editors/super-kirby-clash/index.html',
|
|
'/savegame-editors/super-kirby-clash/favicon.png',
|
|
'/savegame-editors/super-kirby-clash/super-kirby-clash.js',
|
|
'/savegame-editors/savegame-editor.js',
|
|
'/savegame-editors/savegame-editor.css'
|
|
];
|
|
|
|
|
|
|
|
// install event (fired when sw is first installed): opens a new cache
|
|
self.addEventListener('install', evt => {
|
|
evt.waitUntil(
|
|
caches.open('precache-'+PRECACHE_ID+'-'+PRECACHE_VERSION)
|
|
.then(cache => cache.addAll(PRECACHE_URLS))
|
|
.then(self.skipWaiting())
|
|
);
|
|
});
|
|
|
|
|
|
// activate event (fired when sw is has been successfully installed): cleans up old outdated caches
|
|
self.addEventListener('activate', evt => {
|
|
evt.waitUntil(
|
|
caches.keys().then(cacheNames => {
|
|
return cacheNames.filter(cacheName => (cacheName.startsWith('precache-'+PRECACHE_ID+'-') && !cacheName.endsWith('-'+PRECACHE_VERSION)));
|
|
}).then(cachesToDelete => {
|
|
return Promise.all(cachesToDelete.map(cacheToDelete => {
|
|
console.log('delete '+cacheToDelete);
|
|
return caches.delete(cacheToDelete);
|
|
}));
|
|
}).then(() => self.clients.claim())
|
|
);
|
|
});
|
|
|
|
|
|
// fetch event (fired when requesting a resource): returns cached resource when possible
|
|
self.addEventListener('fetch', evt => {
|
|
if(evt.request.url.startsWith(self.location.origin)){ //skip cross-origin requests
|
|
evt.respondWith(
|
|
caches.match(evt.request).then(cachedResource => {
|
|
if (cachedResource) {
|
|
return cachedResource;
|
|
}else{
|
|
return fetch(evt.request);
|
|
}
|
|
})
|
|
);
|
|
}
|
|
});
|