| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- // Incrementing OFFLINE_VERSION will kick off the install event and force
- // previously cached resources to be updated from the network.
- const OFFLINE_VERSION = 1;
- const CACHE_NAME = "offline";
- self.addEventListener("install", (event) => {
- event.waitUntil(
- (async () => {
- const cache = await caches.open(CACHE_NAME);
- // Setting {cache: 'reload'} in the new request will ensure that the
- // response isn't fulfilled from the HTTP cache; i.e., it will be from
- // the network.
- await cache.add(new Request(OFFLINE_URL, { cache: "reload" }));
- })()
- );
- // Force the waiting service worker to become the active service worker.
- self.skipWaiting();
- });
- self.addEventListener("fetch", (event) => {
- // We proxify requests through fetch() only if we are offline because it's slower.
- if (navigator.onLine === false && event.request.mode === "navigate") {
- event.respondWith(
- (async () => {
- try {
- // Always try the network first.
- const networkResponse = await fetch(event.request);
- return networkResponse;
- } catch (error) {
- // catch is only triggered if an exception is thrown, which is likely
- // due to a network error.
- // If fetch() returns a valid HTTP response with a response code in
- // the 4xx or 5xx range, the catch() will NOT be called.
- const cache = await caches.open(CACHE_NAME);
- const cachedResponse = await cache.match(OFFLINE_URL);
- return cachedResponse;
- }
- })()
- );
- }
- });
|