限制位于服务工作者范围内的文件夹

时间:2017-07-19 09:06:45

标签: javascript scope web-worker service-worker

如何在注册服务工作者时限制范围内的文件夹。

我有这样的文件夹结构。

-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。

提前致谢

1 个答案:

答案 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.
});