sw.js 852 B

12345678910111213141516171819202122232425262728293031323334
  1. const CACHE_NAME = 'torqvoice-offline-v1'
  2. const OFFLINE_URL = '/offline.html'
  3. const OFFLINE_ASSETS = [OFFLINE_URL, '/icons/icon-192.png']
  4. self.addEventListener('install', (e) => {
  5. e.waitUntil(
  6. caches.open(CACHE_NAME).then((cache) => cache.addAll(OFFLINE_ASSETS))
  7. )
  8. self.skipWaiting()
  9. })
  10. self.addEventListener('activate', (e) => {
  11. e.waitUntil(
  12. caches.keys().then((keys) =>
  13. Promise.all(keys.filter((k) => k !== CACHE_NAME).map((k) => caches.delete(k)))
  14. )
  15. )
  16. self.clients.claim()
  17. })
  18. self.addEventListener('fetch', (e) => {
  19. if (e.request.mode === 'navigate') {
  20. e.respondWith(
  21. fetch(e.request).catch(() => caches.match(OFFLINE_URL))
  22. )
  23. return
  24. }
  25. if (OFFLINE_ASSETS.includes(new URL(e.request.url).pathname)) {
  26. e.respondWith(
  27. fetch(e.request).catch(() => caches.match(e.request))
  28. )
  29. }
  30. })