Javascript 子目录中的服务工作者,但我希望作用域是根目录
我在子目录(/data/system/)中有service worker js,但我希望它的作用域来自根目录。以下代码:Javascript 子目录中的服务工作者,但我希望作用域是根目录,javascript,firebase,service-worker,Javascript,Firebase,Service Worker,我在子目录(/data/system/)中有service worker js,但我希望它的作用域来自根目录。以下代码: if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/data/system/firebase-messaging-sw.js', { scope: '/' }) .then(function(reg) { // registration w
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.
我如何扩展范围使其工作?如何设置允许的服务工作者HTTP头?我有基本的PHP应用程序,没有角度,没有反应,没有什么特别的。我搜索的所有线程都是针对这些系统的。因此,答案相当复杂 首先,我注意到,我前面提供的代码注册了两次service worker—第一次是搜索根service worker,第二次是搜索我指定的目录。问题在于firebase本身,因为它严格搜索根服务工作者。所以我不得不下载firebase.js并对其进行重新处理,以便它只搜索我的目录。(对于对build 3.6.1-rc.3“navigator.serviceWorker.register”中第525行好奇的人,只需将URL更改为所需的URL)并使用firebase的本地副本而不是官方副本 第二,我必须将.htaccess添加到目录服务工作程序中,如下所示:
<Files "firebase-messaging-sw.js">
Header set Service-Worker-allowed "/"
</Files>
允许的头集服务工作者“/”
把这个留给其他搜索相同内容的人。也许你已经看到stackoverflow.com/questions/49084718/how-juckly-add-service-worker-allowed-to-register-service-worker-scope-in-upp了?他们得出结论,尽可能将SW移动到根目录是最好的:“我想没有明确的方法来控制该标题,使服务人员。。。在使用html/javascript的子文件夹中。。。这是一个只有通过服务器配置才能解决的问题……我的结论是,并不总是能够处理服务器配置,因此将服务工作者文件放在应用程序的根文件夹中是最好的方法。希望这能对其他人有所帮助“问题是,我无法控制应用程序。我所能做的就是”注入“代码指向头部/身体,但我无法以任何方式将工人置于根目录中。所以它必须留在/data/system/directory中,正如我所看到的,它不可能以这种方式工作。我很失望。谢谢你的评论。我没有仔细阅读所有内容,但这个回答也暗示,只要http请求不是ajax请求,就有一种方法可以设置头使其工作。也许你仍然可以从你有权访问的目录中设置,我不知道。