sw.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const OFFLINE_VERSION = 1;
  2. const CACHE_NAME = "offline";
  3. const OFFLINE_URL = "/offline.html";
  4. self.addEventListener("install", (event) => {
  5. event.waitUntil(
  6. (async () => {
  7. const cache = await caches.open(CACHE_NAME);
  8. await cache.add(new Request(OFFLINE_URL, { cache: "reload" }));
  9. })()
  10. );
  11. self.skipWaiting();
  12. });
  13. self.addEventListener("activate", (event) => {
  14. event.waitUntil(
  15. (async () => {
  16. if ("navigationPreload" in self.registration) {
  17. await self.registration.navigationPreload.enable();
  18. }
  19. })()
  20. );
  21. self.clients.claim();
  22. });
  23. self.addEventListener("fetch", (event) => {
  24. if (event.request.mode === "navigate") {
  25. event.respondWith(
  26. (async () => {
  27. try {
  28. const preloadResponse = await event.preloadResponse;
  29. if (preloadResponse) {
  30. return preloadResponse;
  31. }
  32. const networkResponse = await fetch(event.request);
  33. return networkResponse;
  34. } catch (error) {
  35. const cache = await caches.open(CACHE_NAME);
  36. const cachedResponse = await cache.match(OFFLINE_URL);
  37. return cachedResponse;
  38. }
  39. })()
  40. );
  41. }
  42. });