【发布时间】:2016-02-23 06:28:28
【问题描述】:
我有一个带有 HTML、CSS 和 JS 基本“外壳”的应用程序。页面的主要内容是通过对 API 的多个 ajax 调用加载的,该 API 位于我的应用程序正在运行的另一个 URL 上。我已经设置了一个 service-worker 来缓存应用程序的主“shell”:
var urlsToCache = [
'/',
'styles/main.css',
'scripts/app.js',
'scripts/apiService.js',
'third_party/handlebars.min.js',
'third_party/handlebars-intl.min.js'
];
并在请求时以缓存版本响应。我遇到的问题是我的 ajax 调用的响应也被缓存了。我很确定我需要向 service-worker 的 fetch 事件添加一些代码,这些代码总是从网络中获取它们而不是在缓存中查找。
这是我的fetch 活动:
self.addEventListener('fetch', function (event) {
// ignore anything other than GET requests
var request = event.request;
if (request.method !== 'GET') {
event.respondWith(fetch(request));
return;
}
// handle other requests
event.respondWith(
caches.open(CACHE_NAME).then(function (cache) {
return cache.match(event.request).then(function (response) {
return response || fetch(event.request).then(function (response) {
cache.put(event.request, response.clone());
return response;
});
});
})
);
});
我不确定如何忽略对 API 的请求。我试过这样做:
if (request.url.indexOf(myAPIUrl !== -1) {
event.respondWith(fetch(request));
return;
}
但根据 Chrome 开发工具中的网络选项卡,所有这些响应仍然来自 service-worker。
【问题讨论】:
-
为什么不表明响应来自服务人员?另外,您可以使用string.includes。
标签: service-worker