【发布时间】:2017-10-07 11:02:28
【问题描述】:
我正在尝试使用服务人员获取和缓存一些外部资源/网站。
我在service-worker.js 中的代码如下:
'use strict';
var static_urls = [
'https://quiqqer.local/test?app=1',
'https://quiqqer.local/calendar?app=1'
];
self.addEventListener('install', function (event)
{
event.waitUntil(
caches.open('ionic-cache').then(function(cache) {
cache.addAll(static_urls.map(function (urlToPrefetch)
{
console.log(urlToPrefetch);
return new Request(urlToPrefetch, {mode: 'no-cors'});
})).catch(function(error) {
console.error(error);
}).then(function() {
console.log('All fetched and cached');
});
})
);
});
创建此输出:
service-worker.js: https://quiqqer.local/test?app=1
service-worker.js: https://quiqqer.local/calendar?app=1
service-worker.js: TypeError: failed to fetch
service-worker.js: All fetched and cached
(index): service worker installed
获取失败的原因是什么?
我的网站https://quiqqer.local 已将标题Access-Control-Allow-Origin 设置为'*'
也许这是我网站的自签名证书?
我为此证书添加了一个例外,因此如果我打开该站点,Chrome 会在 URL 栏旁边显示该站点不安全,但仍会显示内容。
【问题讨论】:
-
您在“网络”选项卡中看到了什么?支持CORS 不仅仅是一个标题。
-
另外:请记住,如果您使用
catch并且不要在catch处理程序中抛出错误或返回被/将被拒绝的承诺,那么您将拒绝转换为分辨率(这就是为什么您看到“所有已获取并缓存”,而实际上并非全部已获取和缓存)。 -
没有捕获它看起来像这样:
-
service-worker.js:1 Uncaught (in promise) TypeError: Failed to fetch
-
在“网络”选项卡中,我看到了两个请求,但状态为“(已取消)”
标签: javascript caching request service-worker fetch-api