Я создаю 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);
});
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Итак, я столкнулся с этой проблемой. Оказывается, CRA фактически компилирует этого сервис-воркера в другой файл service-worker.js в вашей папке сборки, и он регистрируется. Если вы добавите свой код в конец этого файла, он будет работать, но, к сожалению, вам придется делать это при каждой сборке.
Вместо этого я использую это дополнение: https://www.npmjs.com/package/cra-append-sw, чтобы добавить его автоматически.
В настоящее время у него возникла эта незначительная проблема, требующая запуска с другим параметром: https://github.com/tszarzynski/cra-append-sw/issues/18
Возможно это связано - Можете ли вы использовать сервис-воркер с самозаверяющим сертификатом?