sw-precache:已删除缓存,FetchEvent错误响应

时间:2016-09-18 23:46:50

标签: javascript caching service-worker sw-precache

我正在使用sw-precache为网络应用添加离线支持。

我的设置:

  1. 使用CSS / JS / HTML的静态网站动态内容通过 自定义indexedDB解决方案。
  2. 使用的Grunt任务生成服务工作者。
  3. sw-precache(4.0.0)用于缓存所有静态 资产。
  4. 在apache上设置的service-worker.js上的缓存头 如下:
  5. <LocationMatch "service-worker\.js.*">
        Header set Cache-Control "max-age=0, no-cache"
    </LocationMatch>
    

    在通常的情况下,事情看似很好。但如果由于某种原因,用户清除缓存(例如在Chrome开发工具 - >应用程序 - >清除存储(选择所有内容) - >点击“清除所选内容”,我的网页就不会# 39; t load 即使我在线,我在控制台中看到以下错误:

    &#34; https://my.somedomain.com/somepath/somepage.html&#34;的FetchEvent导致网络错误响应:一个不是响应的对象被传递给respondWith()。

    当我查看生成的service-worker.js时,我注意到以下代码。

    // If shouldRespond was set to true at any point, then call
    // event.respondWith(), using the appropriate cache key.
    if (shouldRespond) {
      event.respondWith(
        caches.open(cacheName).then(function(cache) {
          return cache.match(urlsToCacheKeys.get(url));
        }).catch(function(e) {
          // Fall back to just fetch()ing the request if some unexpected error
          // prevented the cached response from being valid.
          console.warn('Couldn\'t serve response for "%s" from cache: %O', event.request.url, e);
          return fetch(event.request);
        })
      );
    

    调试时,我没有看到catch块被执行。另请参见返回的对象的附加调试输出返回的catch.match传递给respondWith() Console debug output of promise object passed to respondWith

    所以我的问题:

    1. 为什么sw-precache在缓存中找不到条目时不会回退到网络?
    2. 无论如何在缓存中找不到请求条目时强制网络请求?

0 个答案:

没有答案