如何在注册服务工作者时限制范围内的文件夹。
我有这样的文件夹结构。
-root
-folder1
-subfolder1
-subfolder2
-subfolder3
-file.js
-file2.js
-css1.css
-css2.css
-serviceworker.js
根据我的理解:
if ('serviceWorker' in navigator) {
navigator.serviceWorker
.register('serviceworker.js',)
.then(function(reg) {
console.log('Registration succeeded', reg);
})
这里的serviceworker.js文件位于folder1文件夹下,这意味着folder1中的所有文件和子文件夹都在范围内。
我想要的: 有没有办法限制属于服务工作者范围的文件和文件夹,如subfolder1和file.js。
提前致谢
答案 0 :(得分:3)
您不能明确地将服务工作者的范围限制为只应用于一个子路径,而不是当它们共享相同的父路径时应用于另一个子路径。
最直接的方法是明确检查fetch
处理程序中的URL,并在URL与您关注的路径/文件之一匹配时仅调用event.respondWith()
。如果您不打电话给event.respondWith()
,fetch
处理程序基本上都是无操作程序,服务工作人员不会参与响应请求。
E.g:
self.addEventListener('fetch', event => {
if (event.request.url.includes('subfolder1')) {
event.respondWith(/* your caching/network logic */);
}
// By not calling event.respondWith() for certain requests,
// the service worker will effectively be a no-op.
});