为什么我的服务人员访问外国主机?

时间:2017-10-29 13:04:36

标签: javascript google-chrome service-worker

我设法在我的网站上注册了一个服务工作者(目前只有localhost,使用自签名证书并已导入Chrome 62.0.3202.75中的可信证书)。现在我的问题是它无法缓存一些文件,大概是因为它正在制作CORS请求,即使在我的'urlsToCache'列表中只有本地URL(尽管在某些css文件中我是从google-fonts导入的)。

我已经尝试过foreignFetch,但这也失败了...我想我已经尝试过互联网上几乎所有的东西,但找不到解决方案。

我的服务人员代码:

var CACHE_NAME = "stupla-cache-0001";
var urlsToCache = [
  './',
  '/sw.js',
  '/favicon.ico',
  '/stupla-icon-4x.ico',
  '/manifest.json',
  '/js/bootstrap.min.js', 
  '/js/custom.js', 
  '/js/jquery.dlmenu.js', 
  '/js/jquery.js', 
  '/js/jquery.smooth-scroll.min.js', 
  '/js/modernizr.custom.js', 
  '/js/wow.min.js', 
  '/color/default.css', 
  '/css/animate.css', 
  '/css/bootstrap.min.css', 
  '/css/dlmenu.css', 
  '/css/font-awesome.min.css', 
  '/css/overwrite.css',
  '/css/preloader.css',
  '/css/style.css',
  '/css/table.css',
  '/img/mail.png',
  '/img/bg-mac.png', 
  '/img/icons/stupla-icon-2x.ico', 
  '/img/icons/stupla-icon-4x.ico'];

self.addEventListener('install', function(event) {
  // Perform install steps
  event.waitUntil(      // !!! Line 31 !!!
    caches.open(CACHE_NAME)
    .then(function(cache) {
      console.log('Opened cache');
      return cache.addAll(urlsToCache);
    })
  );
});

this.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request).then(function(resp) {
      return resp || fetch(event.request).then(function(response) {
        console.log(response.urlurl + ": " + response.type);
        caches.open(CACHE_NAME).then(function(cache) {
          cache.put(event.request, response.clone());
        });
        return response;
      });
    }).catch(function() {
      return caches.match('/null.dat');
    })
  );
});

Chrome控制台输出:

Uncaught (in promise) TypeError: Failed to fetch
    Promise rejected (async)
    (anonymous) @ sw.js:31

0 个答案:

没有答案