| const CACHE_NAME = 'gbalance-cache-v1'; |
| const urlsToCache = [ |
| '/', |
| '/static/manifest.json', |
| '/static/icons/icon-192x192.png' |
| ]; |
|
|
| self.addEventListener('install', event => { |
| event.waitUntil( |
| caches.open(CACHE_NAME) |
| .then(cache => { |
| console.log('Opened cache'); |
| return cache.addAll(urlsToCache); |
| }) |
| ); |
| }); |
|
|
| self.addEventListener('fetch', event => { |
| event.respondWith( |
| caches.open(CACHE_NAME).then(cache => { |
| |
| return cache.match(event.request).then(responseFromCache => { |
| |
| const fetchPromise = fetch(event.request).then(responseFromNetwork => { |
| |
| cache.put(event.request, responseFromNetwork.clone()); |
| return responseFromNetwork; |
| }).catch(err => { |
| |
| console.error('Network fetch failed:', err); |
| |
| |
| throw err; |
| }); |
|
|
| |
| |
| return responseFromCache || fetchPromise; |
| }); |
| }) |
| ); |
| }); |
|
|
| self.addEventListener('activate', event => { |
| const cacheWhitelist = [CACHE_NAME]; |
| event.waitUntil( |
| caches.keys().then(cacheNames => { |
| return Promise.all( |
| cacheNames.map(cacheName => { |
| if (cacheWhitelist.indexOf(cacheName) === -1) { |
| return caches.delete(cacheName); |
| } |
| }) |
| ); |
| }) |
| ); |
| }); |
|
|