Firebase 在Firefox加载项中从后台javascript注册服务工作者失败

Firebase 在Firefox加载项中从后台javascript注册服务工作者失败,firebase,firefox,google-chrome-extension,firefox-addon,service-worker,Firebase,Firefox,Google Chrome Extension,Firefox Addon,Service Worker,我有一个浏览器扩展,在chrome中工作得非常好。当我将其移植到firefox时,在extensions后台线程中运行的以下代码片段引发了一个异常 if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/firebase-messaging-sw.js',{ updateViaCache: 'none' }) .then(function(registration) {

我有一个浏览器扩展,在chrome中工作得非常好。当我将其移植到firefox时,在extensions后台线程中运行的以下代码片段引发了一个异常

if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/firebase-messaging-sw.js',{
        updateViaCache: 'none'
    })
    .then(function(registration) {
        console.log('Registration successful, scope is:', registration.scope);
    }).catch(function(err) {
        console.log('Service worker registration failed, error:', err);
    });
}
错误如下: DOMEException:“操作不安全。”

我在Firefox 70.0.1中遇到了这个问题,因此我相信这些关于cookie过期设置的现有答案已经过时了(??):

我尝试了我能想到的对manifest.json的所有更改组合,目前清单如下所示:

"permissions": ["storage", "contextMenus", "tabs", "notifications", "*://localhost/*"],
  "content_security_policy": "script-src 'self' '<MY-SHA256>' https://www.gstatic.com https://storage.googleapis.com; object-src 'self'",
  "background": {
    "page": "background.html",
    "persistent": true
  },
  "content_scripts": [
  {
    "matches": ["<all_urls>"],
    "js": ["/assets/js/browser-polyfill.min.js","/load.js"]
  }],
  "web_accessible_resources" : ["*.html", 
    "https://sitecontent.loopworks.com/scripts/fa-5-11-2/js/all.js",
    "https://www.gstatic.com/firebasejs/6.5.0/firebase.js",
    "https://www.gstatic.com/firebasejs/6.5.0/firebase-messaging.js"
  ]
“权限”:[“存储”、“上下文菜单”、“选项卡”、“通知”、“*://localhost/*”],
“内容安全策略”:“脚本src'self'”https://www.gstatic.com https://storage.googleapis.com;对象src“self”,
“背景”:{
“页面”:“background.html”,
“持久”:正确
},
“内容脚本”:[
{
“匹配项”:[“”],
“js”:[“/assets/js/browser polyfill.min.js”,“/load.js”]
}],
“网络可访问资源”:[“*.html”,
"https://sitecontent.loopworks.com/scripts/fa-5-11-2/js/all.js",
"https://www.gstatic.com/firebasejs/6.5.0/firebase.js",
"https://www.gstatic.com/firebasejs/6.5.0/firebase-messaging.js"
]
这是backgound页面的内容:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />

    <script src="/assets/js/firebase.js"></script>
    <script src="/assets/js/firebase-messaging.js"></script>

    <script src="/assets/js/browser-polyfill.min.js"></script>
    <script src="/background.js"></script>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
  </body>
</html>

您需要启用JavaScript才能运行此应用程序。

我完全被困在这里了,所以非常感谢您的建议。

这个用例目前不支持作为附加组件的一部分,而且在运行时报告可用性方面肯定存在缺陷。有关详细信息,请参阅。

此用例目前不支持作为附加组件的一部分,而且在运行时报告可用性方面肯定存在缺陷。有关详细信息,请参阅。

我觉得这听起来像Firefox中的一个bug,我建议将其归档到,如果Firefox假设不能从Firefox加载项中注册SWs,那么他们应该确保navigator中的
“serviceWorker”的计算结果为
false
,就像在其他不受支持的环境中一样,就像通过
http://
提供的网页一样,如果其他人偶然发现,我在2019年11月向Mozilla提出了这个错误:评论表明Firefox加载项不支持服务人员,但他们将来可能会支持。这听起来像Firefox中的错误,如果Firefox假设SWs不能从Firefox插件中注册,那么他们应该确保navigator
中的“serviceWorker”计算结果为
false
,就像在其他不受支持的环境中一样,比如通过
http://
提供服务的网页,以防其他人遇到这种情况,我在2019年11月向Mozilla提出了这个错误:评论表明Firefox插件中不支持服务人员,但他们将来可能会支持。是的,这也是我的理解。我已经看到了一些Mozilla bug,其中考虑了这个特性。如果Mozilla真的在background.js/AddOns中实现了服务工作者,我很想找到一种方法来得到通知!是的,这也是我的理解。我已经看到了一些Mozilla bug,其中考虑了这个特性。如果Mozilla真的在background.js/AddOns中实现了服务工作者,我很想找到一种方法来得到通知!