Задать вопрос
  • Service Worker. Как сделать чтобы запрос кешировался на время и в течение этого времени все запросы попадали в кеш?

    @anastasia__galkina Автор вопроса
    // добавляем обработчик события "fetch"
    self.addEventListener("fetch", (event) => {
      console.log("Fetch событие для", event.request.url);
    
      event.respondWith(
        caches
        .match(event.request)
        .then((response) => {
          //Если response найден в кэше
          if (response) {
            console.log("Найден ", event.request.url, " в кэше");
            return response;
          }
    
          return fetch(event.request).then((response) => {
            // Если response не найден
            if (response.status === 404) {
              return caches.open(CACHE_NAME).then((cache) => {
                return cache.match("404.html");
              });
            }
    
            // Кэширование и возвращение response если его еще нет в кэше
            return caches.open(CACHE_NAME).then((cache) => {
              if (!(event.request.url.indexOf('chr') === 0))
              cache.put(event.request.url, response.clone());
              return response;
            });
          });
        })
        .catch(async (error) => {
          console.log("Error, ", error);
          // Если страница офлайн или нет сети
          return caches.open(CACHE_NAME).then((cache) => {
            return cache.match("404.html");
          });
        })
      );
    });
    Ответ написан
    Комментировать