使用Service Worker

时间:2015-11-20 20:08:05

标签: javascript google-chrome caching service-worker progressive-web-apps

我正在尝试使用服务工作者预缓存一些我的静态应用程序shell文件。我不能使用'sw-appcache',因为我没有使用任何构建系统。但是,我尝试使用'sw-toolbox',但我无法将其用于预缓存。

以下是我在服务工作者JS中所做的事情:

self.addEventListener('install', function(event) {
  event.waitUntil(
    caches.open('gdvs-static').then(function(cache) {
        var precache_urls = [
            '/',
            '/?webapp=true',
            '/css/gv.min.css',
            '/js/gv.min.js'
        ];

        return cache.addAll(precache_urls);
    });
  );
});

我也试过这个:

importScripts('/path/to/sw-toolbox.js');

self.addEventListener('install', function(event) {
   var precache_urls = [
      '/',
      '/?webapp=true',
      '/css/gv.min.css',
      '/js/gv.min.js'
   ];

   toolbox.precache(precache_urls);
});

以下是我的应用的网址:https://guidedverses-webapp-staging.herokuapp.com/ 以下是我的服务工作者文件的URL:https://guidedverses-webapp-staging.herokuapp.com/gdvs-sw.js

我错过了什么?

1 个答案:

答案 0 :(得分:3)

傻傻的我。我忘了将获取处理程序添加到我的服务工作者中。我认为它像appchache一样工作,并在与缓存URL匹配时自动返回缓存的数据。我低估了服务工作者的力量。以下代码为我做了诀窍。

this.addEventListener('fetch', function(event) {
  console.log(event.request.url);

  event.respondWith(
    caches.match(event.request).then(function(response) {
      return response || fetch(event.request);
    })
  );
});