Javascript Firebase在webextension的后台脚本中不工作

Javascript Firebase在webextension的后台脚本中不工作,javascript,firebase,firefox,firefox-addon-webextensions,Javascript,Firebase,Firefox,Firefox Addon Webextensions,浏览器扩展的用户通过firebase登录。Firebase发出的令牌持续1小时,但Firebase SDK中的用户对象透明地处理令牌刷新。这就是为什么我想在我的插件中包含Firebase SDK 在webextension的上下文中加载Firebase js SDK在Firefox中不起作用。这是铬的。我创建了一个测试存储库,它将测试用户记录到测试应用程序中 单击应用程序按钮后,应用程序将尝试登录用户 对于Firefox 55.0.2 Linux 64位,在仅通过加载加载项单击按钮之前,会发生以

浏览器扩展的用户通过firebase登录。Firebase发出的令牌持续1小时,但Firebase SDK中的用户对象透明地处理令牌刷新。这就是为什么我想在我的插件中包含Firebase SDK

在webextension的上下文中加载Firebase js SDK在Firefox中不起作用。这是铬的。我创建了一个测试存储库,它将测试用户记录到测试应用程序中

单击应用程序按钮后,应用程序将尝试登录用户

对于Firefox 55.0.2 Linux 64位,在仅通过加载加载项单击按钮之前,会发生以下错误:

[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 52: SyntaxError: test for equality (==) mistyped as assignment (=)?
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 57: SyntaxError: test for equality (==) mistyped as assignment (=)?
JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 57: SyntaxError: test for equality (==) mistyped as assignment (=)?
JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 82: SyntaxError: test for equality (==) mistyped as assignment (=)?
JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 101: SyntaxError: test for equality (==) mistyped as assignment (=)?
JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 106: SyntaxError: test for equality (==) mistyped as assignment (=)?
JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 107: SyntaxError: test for equality (==) mistyped as assignment (=)?
JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 125: SyntaxError: test for equality (==) mistyped as assignment (=)?
JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 177: SyntaxError: test for equality (==) mistyped as assignment (=)?
JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 272: SyntaxError: test for equality (==) mistyped as assignment (=)?
JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 274: SyntaxError: test for equality (==) mistyped as assignment (=)?
JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 396: SyntaxError: test for equality (==) mistyped as assignment (=)?
JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 412: SyntaxError: test for equality (==) mistyped as assignment (=)?
JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 471: SyntaxError: test for equality (==) mistyped as assignment (=)?
JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 475: SyntaxError: test for equality (==) mistyped as assignment (=)?
JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 477: SyntaxError: test for equality (==) mistyped as assignment (=)?
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 28: ReferenceError: reference to undefined property "name_"
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 285: ReferenceError: reference to undefined property "a"
[firefox/index.js][debug] Firefox stderr: JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 28: ReferenceError: reference to undefined property "Auth"
然后单击按钮后:

 [firefox/index.js][debug] Firefox stderr: JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 279: ReferenceError: reference to undefined property "currentUser"
 [firefox/index.js][debug] Firefox stderr: JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 59: ReferenceError: reference to undefined property "closure_lm_434254"
 [firefox/index.js][debug] Firefox stderr: JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 54: ReferenceError: reference to undefined property "storage"
 [firefox/index.js][debug] Firefox stderr: JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 176: ReferenceError: reference to undefined property "Va"
 [firefox/index.js][debug] Firefox stderr: JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 176: ReferenceError: reference to undefined property "Oe"
 [firefox/index.js][debug] Firefox stderr: JavaScript strict warning: moz-extension://ec7f4b77-3e2d-48c6-8e27-bb75d93980d1/firebase.js, line 91: ReferenceError: reference to undefined property "readystatechange"
此外,控制台向www.googleapis.com显示被阻止的CORS请求 注意:该域在manifest.json中的CPS指令中被列为白名单,并且 Firebase错误身份验证/网络请求失败

详细说明见自述文件

我的问题是:Firebase只是不能与Firefox一起工作,还是我可以做些什么来让它工作?特别是,我是否缺少manifest.json中的一些内容,或者我是否需要首先通过Babel传递Firebase SDK,因为SpiderMonkey不理解V8中的一些JS

记录在案,使用Firebase在网页中加载Firebase不会有任何问题

编辑:MWE如下:

manifest.json

background.js:

您必须从CDN复制firebase。像curl-LO这样的东西https://www.gstatic.com/firebasejs/4.0.0/firebase.js 应该这样做


虽然我建议如果你想尝试一下,你可以使用我链接的上面的repo。

Chrome似乎默认允许从插件调用www.googleapis.com,但是Firefox不允许

Firefox报告的JavaScript严格错误似乎不会对运行时行为产生负面影响


添加https://www.googleapis.com/*to manifest.json:permissions解决了Firefox无法进行身份验证的问题。

请在主题中提出问题:包含一个重复该问题的问题。对于Chrome扩展或Firefox WebExtensions,您几乎总是需要包含manifest.json和一些背景、内容和/或弹出脚本/HTML,通常还有网页HTML/scripts。寻求调试帮助的问题为什么我的代码不能按我想要的方式工作?必须包括:1期望的行为,2特定的问题或错误,以及3在问题本身中重现它所需的最短代码。另请参见:,和。问题是:我必须包含一个MWE的整个存储库,即几个文件。这个问题很长,我把它包括进去了。使用链接存储库可能更容易,但如果您知道如何设置webextension,这就足够了。
{
  "description": "Firebase & Firefox test case",
  "homepage_url": "https://github.com/adimit/test-firebase",
  "manifest_version": 2,
  "name": "firebase-test-case",
  "version": "1.0.0",

  "icons": {
    "64": "icons/logo-64.png"
  },

  "browser_action": {
    "browser_style": true,

    "default_icon": {
      "64": "icons/logo-64.png"
    }
  },

  "background": {
    "scripts": [
      "firebase.js", "background.js"
    ]
  },

  "content_security_policy": "script-src 'self' 'unsafe-eval' https://www.gstatic.com/ https://*.firebaseio.com https://www.googleapis.com; object-src 'self'",

  "permissions": [
    "tabs",
    "storage"
  ]
}
const clickButton = () => {
  console.log("firebase object", firebase);

  var config = {
    apiKey: "AIzaSyABe5Ge-PSeZzfZU2EhllUI-w3fMb1nci8",
    authDomain: "webext-firefox.firebaseapp.com",
    databaseURL: "https://webext-firefox.firebaseio.com",
    projectId: "webext-firefox",
    storageBucket: "",
    messagingSenderId: "909758240321"
  };
  firebase.initializeApp(config);

  const user = {
    id: "no.email@example.com",
    password: "test-password"
  };

  firebase.auth().signInWithEmailAndPassword(
    user.id,
    user.password
  ).then(
    user => {
      console.log("user", user);
    },
    error => {
      console.log("error", error);
    }
  );
};

chrome.browserAction.onClicked.addListener(clickButton);