Service Worker: ошибка обнаружена (в обещании) TypeError: схема запроса 'data' не поддерживается

Что происходит при первой загрузке веб-сайта при поиске и кэшировании не возникает никаких проблем. Но при обновлении (обычная перезагрузка) событие Fetch сталкивается с проблемой и показывает это в журнале консоли.

Uncaught (в обещании) TypeError: Схема запроса 'data' не поддерживается в self.addEventListener.e.respondWith.fetch.then.caches.open.then.cache

Я понял, что при перезагрузке он получает format data:[<mediatype>][;base64],<data>что вызывает ошибку в журнале консоли.

// Call Fetch Event
self.addEventListener('fetch', e => {
  console.log('Service Worker: Fetching');
  e.respondWith(
    fetch(e.request)
      .then(res => {
        // Make copy/clone of response
        const resClone = res.clone();
        // Open cahce
        caches.open(cacheName).then(cache => {
          // Add response to cache
          cache.put(e.request, resClone);
        });
        return res;
      })
      .catch(err => caches.match(e.request).then(res => res))
  );
});

Я хочу избежать этой ошибки, но я не знаю как.

1 ответ

Хорошей практикой является открытие кеша перед отправкой запроса на выборку, чтобы гарантировать, что ваш кеш существует. И вы можете вернуться к ответу кеша в случае сбоя сети. Следующий код обновит ваш кеш:

e.respondWith(
  caches.open(cacheName).then(cache => {
    cache.match(e.request).then(cacheResponse => {
      const networkFetch = fetch(e.request).then(networkResponse => {
        cache.put(e.request, networkResponse.clone());
        return networkResponse
      });

      return cacheResponse || networkFetch;
    });
  }).catch(error => {
    console.log('error in cache open: ', error)
  })
) 
Другие вопросы по тегам