使用sw-precache实用程序,我创建了一个在刷新页面时可以工作的服务工作者。但最初,fetch调用会在一个文件上返回TypeError: Failed to fetch
,这似乎取消了其余的文件。刷新获取更多文件,刷新几次直到获取所有文件,然后服务工作者正常工作。即使使用缓存破坏程序,每个URL每次都可以正常加载。所有来电均为https://localhost:9001,并且是直接get
来电。共有17个文件。
以下是代码段:
self.addEventListener('install', function(event) {
event.waitUntil(
caches.open(cacheName).then(function(cache) {
return setOfCachedUrls(cache).then(function(cachedUrls) {
return Promise.all(
Array.from(urlsToCacheKeys.values()).map(function(cacheKey) {
// If we don't have a key matching url in the cache already, add it.
if (!cachedUrls.has(cacheKey)) {
var request = new Request(cacheKey, {credentials: 'same-origin'});
return fetch(request).then(function(response) {
// Bail out of installation unless we get back a 200 OK for
// every request.
if (!response.ok) {
throw new Error('Request for ' + cacheKey + ' returned a ' +
'response with status ' + response.status);
}
return cleanResponse(response).then(function(responseToCache) {
return cache.put(cacheKey, responseToCache);
});
}).catch(function(e) {
throw new Error('fetch error: ' + e);
});
}
})
);
});
}).then(function() {
})
);
});
我尝试将keepalive:true,headers:{"Access-Control-Allow-Origin": "*"}
添加到请求中,但得到的结果相同。
似乎请求很快就会失败,我已经看到请求需要花费一秒多的时间才能响应。也许有办法设置超时?
在chrome dev工具网络标签中,它显示红色的失败尝试,其中(canceled)
状态和左侧的小服务工作者图标。
似乎在FireFox中运行良好。 Chrome遇到了麻烦。