服务工作者提取不会发出网络请求

时间:2017-10-18 12:03:23

标签: service-worker

非常简单的情况。我试图进行网络优先缓存,因为内容是可变的。但是,服务工作者似乎从磁盘缓存而不是网络提供服务。它似乎甚至没有检查服务器的更新(在Chromium中)。见附件截图。

这是我的页面:

<html>
  <body>
    <script>
      function printFile() {
        fetch('file.txt').then(resp => resp.text()).then(x => console.log(x));
      }

      if ('serviceWorker' in navigator) {
        navigator.serviceWorker.register('sw.js')
          .then(function(reg) {
            // registration worked
            console.log('Registration succeeded. Scope is ' + reg.scope);

            navigator.serviceWorker.ready.then(printFile);
          }).catch(function(error) {
            // registration failed
            console.log('Registration failed with ' + error);
          });
      }
    </script>
  </body>
</html>

和服务工作者:

self.addEventListener('install', function(event) {
  event.waitUntil(self.skipWaiting());
});

self.addEventListener('activate', function(event) {
  event.waitUntil(self.clients.claim());
});

self.addEventListener('fetch', function(event) {
  console.log('Fetching ' + event.request.url);
  event.respondWith(
    fetch(event.request)
  );
});

如何强制我的服务工作者向服务器发出请求以获取file.txt的新副本?

enter image description here

1 个答案:

答案 0 :(得分:1)

啊,显然fetch首先通过常规浏览缓存。解决方案发布在Jaffa's excellent guide