Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 子目录中的服务工作者,但我希望作用域是根目录_Javascript_Firebase_Service Worker - Fatal编程技术网

Javascript 子目录中的服务工作者,但我希望作用域是根目录

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

我在子目录(/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.

我如何扩展范围使其工作?如何设置允许的服务工作者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请求,就有一种方法可以设置头使其工作。也许你仍然可以从你有权访问的目录中设置,我不知道。