我设法在我的网站上注册了一个服务工作者(目前只有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