子目录中的Service Worker,但我希望作用域为root

时间:2019-01-26 23:01:08

标签: javascript firebase service-worker

我在子目录(/ 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,没什么特别的。我搜索的所有线程都是这些系统的。

1 个答案:

答案 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>

只要将它留在这里,其他搜索相同内容的人。