Создать приложение React ServiceWorker.js Перенаправление в автономном режиме

#javascript #service-worker #create-react-app

#javascript #service-worker #create-react-app

Вопрос:

У меня есть приложение React, созданное с помощью create-react-app. По умолчанию этот инструмент создает serviceWorker.js файл для нас, и я использую это для регистрации работника службы. Кроме того, в документах предлагается использовать мастер Google workbox для создания service-worker.js используется для управления моим веб-сайтом в автономных целях. Цель для меня — сохранить offline.html страница в кэше браузера и всякий раз, когда нет подключения к Интернету, отобразите кэшированную offline.html страница.

Мне удалось сохранить offline.html в кэше, и, как вы можете видеть ниже, оно хранится в предварительно кэшированных URL-адресах (проверьте последние две строки). введите описание изображения здесь

Я также могу вручную перейти к offline.html , если изменю URL в своем браузере.

Однако у меня возникают проблемы с автоматическим захватом этого файла и его отображением всякий раз, когда нет соединения.

В serviceWorker.js в коде, который сгенерирован для меня из CRA, есть функция, вызываемая checkValidServiceWorker :

 function checkValidServiceWorker(swUrl, config) {
  // Check if the service worker can be found. If it can't reload the page.
  fetch(swUrl)
    .then(response => {
      // Ensure service worker exists, and that we really are getting a JS file.
      const contentType = response.headers.get('content-type');
      if (
        response.status === 404 ||
        (contentType != null amp;amp; contentType.indexOf('javascript') === -1)
      ) {
        // No service worker found. Probably a different app. Reload the page.
        navigator.serviceWorker.ready.then(registration => {
          registration.unregister().then(() => {
            window.location.reload();
          });
        });
      } else {
        // Service worker found. Proceed as normal.
        registerValidSW(swUrl, config);
      }
    })
    .catch(() => {
      console.log(
        'No internet connection found. App is running in offline mode.'
      );
      const OFFLINE_URL = '/.offline/offline.html';
      return caches.match(OFFLINE_URL).then((response) => {
        console.log(response)
      });
    });
}
  

Итак, в catch части функции я хочу выполнить свое перенаправление, потому что это логика, которая выполняется, когда мы находимся в автономном режиме. Я прочитал много документов, и мое текущее решение не работает. Есть идеи о том, как перенаправить в моем ServiceWorker?