firebase 将清单版本3 Chrome扩展连接到firestore数据库

rdrgkggo  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(154)

问题
我正在写一个chrome扩展,用户可以使用firestore数据库中的内容填写表单,我面临的核心问题是chrome扩展的manifest version 3似乎不支持google与firestore交互的任何机制。
以前,使用Manifest Version 2时,您可以链接到background.html文件中CDN托管的firebase脚本,如下所示:

<script src="https://www.gstatic.com/firebasejs/7.14.6/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.14.6/firebase-firestore.js"></script>

在MV3中,出于安全原因,不再允许远程托管代码,尽管我试图链接的脚本是google的,并且一旦加载解压缩的扩展,尝试这样做就会抛出错误。

我的问题:

如何将Manifest Version 3 Chrome扩展连接到firestore数据库?

我所尝试的

我花了很多时间尝试将cdn脚本拉到本地,然后将它们直接导入到我的background.js中,如下所示:

try {
    importScripts('firebase/firebase-firestore.js');
} catch (error) {
    console.log(error);
}

这种方法让我陷入了一个兔子洞,因为它也不起作用,但显然是出于不同的原因。特别是,对于MV3,XMLHttpRequest在服务工作者中不受支持。

可能的后续步骤

从我所做的阅读,我真的希望有人在这里可以指出我错过了什么,它似乎将不可能连接到一个扩展直接。我读到其他地方的firebase实时数据库 * 可以 * 通过MV3 chrome 扩展访问。
在firestore和实时数据库之间建立一些链接,让我们的用户能够通过chrome扩展访问相关内容,然后将实时数据库连接到扩展,这似乎是下一步,这可行吗?

为什么不使用清单版本2?

为了保证我们应用的未来发展,我们不希望在MV2弃用时陷入混乱。虽然官方渠道没有显示MV2的弃用日期,但the chromium blog says
"虽然取消对Manifest V2扩展的支持还没有确切的日期,但开发人员可以预计,从Manifest V3进入稳定通道起,迁移期至少会持续一年。"
这使得MV2的寿命在2022年初的某个时候结束。

编辑以添加:

他们announced some hard dates,2022年1月,他们停止接受新的MV2扩展,但现有扩展的维护可能会持续到2023年1月,届时所有扩展必须是MV3。

q43xntqr

q43xntqr1#

我刚刚看到这个问题,因为我只是做了一个扩展与manifest v3和firebase,我已经有大约两天相同的问题,但我想我终于找到了一个解决方案。

导入firebase文件

首先是manifest v3不接受外部文件的问题。在他们的文档中,他们说你可以使用npm install firebase并按照他们的文档来连接它,但这仍然是坏的。我所做的是从firebase的url下载文件并创建一个文件夹,其中包含所有文件。这些URL具有以下模式:
https://www.gstatic.com/firebasejs/VERSION/firebase-SERVICE.js--〉(其中VERSION是SDK版本,如9.6.4,SERVICE是SDK名称,如firebase-firestore)
所有这些文件都可以放在一个文件夹中,如下所示:

连接到firebase然后你必须创建你的后台文件。在我的例子中,我将它命名为firebase.js。在这个文件中,第一行将是导入

import { initializeApp } from "/firebase/firebase-app.js";
import { HERE YOU WRITE THE SERVICES YOU WANT } from '/firebase/firebase-auth.js';
import {HERE YOU WRITE THE SERVICES YOU WANT} from '/firebase/firebase-firestore.js';

如您所见,您必须使用文件的相对路径。
您必须知道的一件重要事情是firebase的所有服务文件都依赖于firebase-app.js,因此您必须将其导入编辑为项目中firebase-app.js的相对路径。
然后您必须声明firebase配置:

const firebaseConfig = {
    apiKey: "///////",
    authDomain: "///////",
    projectId: "///////",
    storageBucket: "///////",
    messagingSenderId: "///////",
    appId: "///////",
    measurementId: "///////"
};

(You可以在firebase的项目设置页面中找到此信息)
最后,你必须初始化你的firebase应用和所有服务,就像这样(例如auth和firestore服务):

const firebase = initializeApp(firebaseConfig);
const auth = getAuth(firebase);
const db=getFirestore(firebase);

调整清单文件

因为您使用的是导入,所以background.js(在我的例子中是firebase.js)必须是模块,所以在manifest.json文件中写入以下内容:

"background": {
    "service_worker": "firebase.js",
    "type": "module"
  }

接下来的步骤取决于您想要使用的服务。从这里开始文档就足够好了。
最后一个简短的警告,由于manifest v3的工作方式,我认为有些服务根本不工作,但我不是很确定。
希望这对你或任何有这个问题的人有帮助:D

相关问题