使用 sw-precache 实用程序,我创建了一个服务工作者,如果我刷新页面就可以工作。但最初,fetch 调用返回TypeError: Failed to fetch
一个似乎取消其余部分的文件。Refresh 获取更多文件,再刷新几次,直到所有文件都被获取,然后 service worker 工作正常。每个 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 开发工具网络选项卡中,它以红色显示失败的尝试,(canceled)
并在左侧显示状态和小服务人员图标。
它似乎在 FireFox 中运行良好。Chrome 遇到了麻烦。