javascript - Service Worker 似乎没有更新

标签 javascript service-worker

我正在关注以下关于 service worker 的 html5 rocks 教程 ( http://www.html5rocks.com/en/tutorials/service-worker/introduction/#disqus_thread ),但我遇到了我的 service worker 不想更新的问题。

我有一个名为“app.js”的文件,其中包含以下代码:

navigator.serviceWorker.register('worker.js').then(function(reg) {
  console.log('◕‿◕', reg);
}, function(err) {
  console.log('ಠ_ಠ', err);
});

我还有一个名为“worker.js”的文件,其中包含以下代码:

console.log("SW startup");
var myCache = 'myapp-static-v3';
var urlsToCache = [ 
  '/',
  '/assets/style.css',
  'app.js'
];

self.addEventListener('install', function(event) {
  console.log("SW installed");
  // pre cache a load of stuff:
  event.waitUntil(
    caches.open(myCache).then(function(cache) {
      console.log("opened cache");
      return cache.addAll(urlsToCache);
    })
  )
});

self.addEventListener('activate', function(event) {

  var cacheWhitelist = [myCache];

   event.waitUntil(
    caches.keys().then(function(cacheNames) {
      return Promise.all(
        cacheNames.map(function(cacheName) {
          if (cacheWhitelist.indexOf(cacheName) === -1) {
            return caches.delete(cacheName);
          }
        })
      );
    })
  );
});

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request)
      .then(function(response) {
        // Cache hit - return response
        if (response) {
          return response;
        }

        var fetchRequest = event.request.clone();

        return fetch(fetchRequest).then(
          function(response) {
            // Check if we received a valid response
            if(!response || response.status !== 200 || response.type  !== 'basic') {
              return response;
        }

        var responseToCache = response.clone();

        caches.open(CACHE_NAME)
          .then(function(cache) {
            cache.put(event.request, responseToCache);
          });

        return response;
      }
    );
  })
);
});

我尝试更新实际的 myCache 变量名称,将 style.css 切换为不同的文件并实际更改内容。

有人知道我做错了什么吗?

最佳答案

enter image description here

根据文档,必须更改服务 worker 的实际文件。我在 service worker 更新中所做的是更改版本号。在您的情况下,它可能是 var myCache = 'myapp-static-v3';

你可以做一些类似语义版本控制的事情。
var myCache = 'myapp-static-v3.0.0' 然后升级到 var myCache = 'myapp-static-v3.0.1';

关于javascript - Service Worker 似乎没有更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33819380/

相关文章:

javascript - 是否有用于 JavaScript 的 BCE/CE 日期库?

javascript - 为什么调用javascript类方法需要在函数中声明?

javascript - Service Worker 的范围是多少?

testing - Chrome DevTools > Service Workers > Testing > Local dev environment serves via http on a LAN

javascript - 图像 src 未写入弹出窗口主体?

javascript - 极其简单的 Angular/Node 应用程序无法按预期工作

javascript - 如何在 ServiceWorker 中处理 Session 过期

javascript - PWA - 即使在硬刷新后前端也不会更新

javascript - 如何在另一个变量中显示来自 XMLHttpRequest 的数据?

javascript - IIS 的 web.config 设置是否会干扰 ServiceWorker 缓存?