javascript - 子目录中的服务 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 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/

相关文章:

javascript - 仅关注与警报一起工作

python - 找不到 gcloud 发行版,应用程序需要它 - python pyinstaller

android - 谷歌 6 月 17 日 Firebase SDK 更新后,Ionic Cordova 应用程序停止编译

javascript - 等待 ServiceWorker 完成注册后再订阅

angular - 进度条无法使用带有 Angular cli 的服务 worker

javascript - 将 ng-model 属性传递给自定义指令

javascript - 如何实现 Ruby 的 Array.include?在 JavaScript 中?

javascript - 使用 React-router v4 进行导航

javascript - 如何将图像数组上传到 firebase 存储?

reactjs - 如何使用Create React App实现skipWaiting?