我很难理解服务工作者的行为方式。 我在我的域的根目录中有一个Angular渐进式Web应用程序。此文件夹包含所有JavaScript文件。 然后我的每个客户端都有一个子文件夹,其中包含index.html文件,manifest.json和与此客户端相关的一些图像。 因此,索引文件指向父文件夹中的JavaScript文件。
现在我想要一个服务工作者来缓存根文件中的JavaScript文件和每个子文件夹中的索引文件。
现在我已将服务工作者放在根目录中,但对于每个客户端,它将缓存我不想要的所有其他客户端文件。每当我需要创建一个新的子文件夹时,我必须更新根目录中的服务工作者。有没有办法让多个服务工作者,每个子文件夹一个? (我知道它无法获取父目录中的文件)
答案 0 :(得分:1)
是的,您可以通过指定选项scope
为不同的路径注册多个服务工作者。
navigator.serviceWorker.register('/sw.js', {
scope: '/path/to/folder1'
}).then(function(registration) {
console.log('Service worker registration succeeded. This service worker will catch all http requests under /path/to/folder1');
});
navigator.serviceWorker.register('/sw.js', {
scope: '/path/to/folder2'
}).then(function(registration) {
console.log('Service worker registration succeeded. This service worker will catch all http requests under /path/to/folder2');
});
相关的MDN文章。
https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register