javascript - Service Worker 获取数据时出现问题

标签 javascript web-worker service-worker

我正在使用下面的脚本从服务 worker 那里获取 bootstrap.min.js 文件,但在网络面板中它显示了 1 个对 bootstrap.min.js 的请求,而所有其他请求则显示了 2 个请求,我已附上屏幕截图,有人可以帮我解决这个问题吗?

var CACHE_VERSION = 8;

var CURRENT_CACHES = {
  prefetch: 'prefetch-cache-v' + CACHE_VERSION,
  font: 'font-cache-v' + CACHE_VERSION
};

//安装服务 worker

self.addEventListener('install', function(event) {
  var now = Date.now();

    var urlsToPrefetch = [
    '/themes/2.0/fluid/public/responsive/js/bootstrap.min.js'
    ];

    console.log('Handling install event. Resources to prefetch:', urlsToPrefetch);

    event.waitUntil(
        caches.open(CURRENT_CACHES.prefetch).then(function(cache) {
            var cachePromises = urlsToPrefetch.map(function(urlToPrefetch) {
                console.log("comes here23");
            var url = new URL(urlToPrefetch, location.href);
            url.search += (url.search ? '&' : '?') + 'cache-bust=' + now;

            var request = new Request(url, {mode: 'no-cors'});

            return fetch(request).then(function(response) {
              if (response.status >= 400) {
                throw new Error('request for ' + urlToPrefetch +' failed with status ' + response.statusText);
              }
              // Use the original URL without the cache-busting parameter as the key for cache.put().
              return cache.put(urlToPrefetch, response);
            }).catch(function(error) {
              console.error('Not caching ' + urlToPrefetch + ' due to ' + error);
            });
          });

          return Promise.all(cachePromises).then(function() {
            console.log('Pre-fetching complete.');
          });
        }).catch(function(error) {
        //  console.error('Pre-fetching failed:', error);
        })

    );
});

//从 Service Worker 获取请求

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

  event.respondWith(


    caches.match(event.request).then(function(response) {
      if (response) {
        console.log("comes here", event.request);
        return response;
      }
      console.log("no cache exists");

      return fetch(event.request).then(function(response) {
        return response;
      }).catch(function(error) {

        throw error;
      });

    })

  );
});

Network

最佳答案

任何遇到上述问题的人都可以使用此代码,这可能对某人有帮助

var CACHE_NAME = 'cache-v1';

var REQUIRED_FILES = [
  '/themes/2.0/fluid/public/responsive/js/bootstrap.min.js'
];

安装

self.addEventListener('install', function(event) {
  // Perform install step:  loading each required file into cache
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(function(cache) {
        // Add all offline dependencies to the cache
        return cache.addAll(REQUIRED_FILES);
      })
      .then(function() {
        // At this point everything has been cached
        return self.skipWaiting();
      })
  );
});

激活

self.addEventListener('activate', function(event) {
  // Calling claim() to force a "controllerchange" event on navigator.serviceWorker
  event.waitUntil(self.clients.claim());
});

获取

self.addEventListener('fetch', function(event) {
      const requestURL = new URL(event.request.url);
  if (/^(\/2.0\/)/.test(requestURL.pathname)) {
    event.respondWith(
        caches.open(CACHE_NAME)
        .then(function(cache) {
            return cache.match(event.request)
                .then(function(response) {
                    if (response) {
                        return response;
                    }
                    return fetch(event.request);
                });
        })
    );
  }
});

关于javascript - Service Worker 获取数据时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40231608/

相关文章:

javascript - React 中对象的状态更新是如何准确工作的

javascript - AngularJS 和网络 worker

javascript - Service Worker 的缓存存储大小限制是多少?

angular - Angular中SwUpdate.activateUpdate()的作用是什么?

javascript - Ramda,从数组中提取一个 json 索引

javascript - mocha karma 测试运行程序出错

javascript - 如何修复带有嵌入式框架的页面布局

javascript - 这是在网络工作线程之间传递完整对象的方法吗?

javascript - 非阻塞 Javascript 和并发

javascript - 当应用程序处于 sleep 模式时,有没有办法在 PWA 中的服务工作人员中跟踪用户当前位置?