我在子目录(/ data / system /)中有服务工作者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标头?我有基本的PHP应用程序,没有Angular,没有React,没什么特别的。我搜索的所有线程都是这些系统的。
答案 0 :(得分:0)
所以,答案很复杂。
首先,我注意到,我之前提供的代码已注册了2个服务工作者-首先是搜索root服务工作者,其次是我指定的目录。问题在于firebase本身,因为它严格搜索根服务工作者。因此,我必须下载firebase.js并进行重新处理,以便仅搜索我的目录。 (对于对版本3.6.1-rc.3感到好奇的人,只需将“ navigator.serviceWorker.register”中的525行更改为所需的URL),然后使用Firebase的本地副本代替正式版本即可。
第二,我必须将.htaccess添加到以下目录中的目录服务工作程序中:
<Files "firebase-messaging-sw.js">
Header Set Service-Worker-allowed "/"
</Files>
只要将它留在这里,其他搜索相同内容的人。