Слушатель событий выборки React Service Worker никогда не выполняется для внешних запросов API

Я создаю PWA с помощью React.

Мой Сервисный работник, похоже, работает нормально, за исключением прослушивателя событий выборки, который не выполняется, когда в моем приложении Реагировать срабатывает HTTP-запрос GET, используя API выборки для получения данных из внешнего API в Интернете.

Where should I be placing my fetch event listener?

Работает ли он для внешних запросов или только для запросов к файлам, которые являются частью приложения?
Пожалуйста, дайте мне знать, если вы заметите какие-либо проблемы с моим кодом ниже.

Я использую шаблонный файл Сервисный работник, который появляется при использовании create-react-app для запуска нового проекта.


Вот мой код:

(Казнь никогда не попадает в window.addEventListener('fetch', ...) часть)

function registerValidSW(swUrl) {
  navigator.serviceWorker
    .register(swUrl)
    .then(registration => {
      registration.onupdatefound = () => {
        const installingWorker = registration.installing;
        installingWorker.onstatechange = () => {
          if (installingWorker.state === 'installed') {
            if (navigator.serviceWorker.controller) {

              window.addEventListener('fetch', (event) => {
                event.respondWith(
                  caches.match(event.request)
                    .then((response) => {
                      if (response) {
                        return response
                      }
                      return fetch(event.request).then(response => { 
                        caches.open('fetch').then((cache) => {
                          cache.put(event.request, response.clone());
                        });
                        return response;
                      })
                    }
                  )
                );
              });

              console.info('New content is available; please refresh.');
            } else {
              // static files caching
              cacheStaticFiles();

              // external api data caching
              cacheApiData();

              // At this point, everything has been precached
              console.info('Content is now cached for offline use.');
            }
          }
        };
      };
    })
    .catch(error => {
      console.error('Error during service worker registration:', error);
    });
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
1 276
1

Ответы 1

Итак, я столкнулся с этой проблемой. Оказывается, CRA фактически компилирует этого сервис-воркера в другой файл service-worker.js в вашей папке сборки, и он регистрируется. Если вы добавите свой код в конец этого файла, он будет работать, но, к сожалению, вам придется делать это при каждой сборке.

Вместо этого я использую это дополнение: https://www.npmjs.com/package/cra-append-sw, чтобы добавить его автоматически.

В настоящее время у него возникла эта незначительная проблема, требующая запуска с другим параметром: https://github.com/tszarzynski/cra-append-sw/issues/18

Другие вопросы по теме