我正在尝试使用服务工作者构建离线应用程序。我有一个资源列表,如下所示:
下面的代码位于
var urlsToPrefetch = ['foo.html', 'bar.js']
许多URL都添加了查询字符串,这导致服务工作者的fetch
事件失败,因为请求与缓存中定义的不匹配。查询字符串主要用于强制获取新文件版本。例如,bar.js
被请求为bar.js?version=2
虽然Chrome V50尚未实现此选项(ignoreSearch
),但有一个忽略查询字符串的选项。Chrome Canary仅适用于Win / Mac。下面的代码位于
fetch eventListener
中。event.respondWith(
// caches.match() will look for a cache entry in all of the caches available to the service worker.
// It's an alternative to first opening a specific named cache and then matching on that.
caches.match(event.request, {'ignoreSearch': true} ).then(function(response) {
if (response) {
return response;
}
...
)
Request
对象将会被自动创建。请参考https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache-matchall-method的5.4.2.3.3章节。此外,由于对于Cache Storage API来说,只有URL是最重要的,所以不必复制所有其他Request
属性。 - Jeff Posnick