我在子目录 (/data/system/) 中有 service worker js,但我希望它的范围来自根目录。以下代码:
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/data/system/firebase-messaging-sw.js', { scope: '/' })
.then(function(reg) {
// registration worked
console.log('Registration succeeded.');
}).catch(function(error) {
// registration failed
console.log('Registration failed with ' + error);
});
}
打印错误:
The path of the provided scope ('/') is not under the max scope allowed ('/data/system/'). Adjust the scope, move the Service Worker script, or use the Service-Worker-Allowed HTTP header to allow the scope.
如何扩展范围以使其正常工作?如何设置 set Service-Worker-Allowed HTTP header ?我有基本的 PHP 应用程序,没有 Angular,没有 React,没有什么特别的。我搜索的所有线程都是针对这些系统的。
最佳答案
所以,答案相当复杂。
首先,我注意到,我之前提供的代码注册了 service worker 两次 - 第一次是搜索根 service worker,第二次是我指定的目录。问题出在 firebase 本身,因为它严格搜索 root service worker。所以我不得不下载 firebase.js 并重新处理它,以便它只搜索我的目录。 (对于任何对构建 3.6.1-rc.3 感兴趣的人,“navigator.serviceWorker.register”中的第 525 行只需将 URL 更改为您想要的)并使用 firebase 的本地副本而不是官方副本。
其次,我必须使用以下几行将 .htaccess 添加到目录 service worker 中:
<Files "firebase-messaging-sw.js">
Header set Service-Worker-allowed "/"
</Files>
只是把它留在这里,以供其他搜索相同内容的人使用。
关于javascript - 子目录中的服务 worker ,但我希望范围是根目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54383593/