javascript - 将 Manifest Version 3 Chrome Extension 连接到 firestore 数据库
问题描述
问题
我正在编写一个 chrome 扩展,用户将使用它来使用托管在 firestore 数据库中的内容来填写表单。我面临的核心问题是 Chrome 扩展的清单版本 3 似乎不支持任何谷歌与 firestore 交互的机制。
以前,使用 Manifest 版本 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 Extension 连接到 firestore 数据库?
我试过的
我花了很多时间尝试在本地提取 cdn 脚本,然后将它们直接导入到我的background.js
喜欢中:
try {
importScripts('firebase/firebase-firestore.js');
} catch (error) {
console.log(error);
}
这种方法使我陷入了深深的困境,因为这也不起作用,但显然是出于不同的原因。具体来说,对于 MV3,服务工作者不支持 XMLHttpRequest。
可能的后续步骤
从我所做的阅读来看,我真的希望这里有人能指出我错过的东西,似乎无法将 firestore 直接连接到扩展。我在别处读到可以通过 MV3 chrome 扩展访问 firebase 实时数据库。
为我们的用户需要能够使用 chrome 扩展程序访问的相关内容在 firestore 和实时数据库之间建立一些链接,然后将实时数据库连接到扩展程序似乎是下一步。这可行吗?
为什么不使用清单版本 2?
只是为了将来证明我们的应用程序,当 MV2 被弃用时,我们不希望陷入混乱。虽然任何官方频道上都没有出现 MV2 的弃用日期,但 Chromium 博客说:
“虽然没有取消对 Manifest V2 扩展的支持的确切日期,但开发人员可以预期迁移期将在 Manifest V3 登陆稳定渠道后持续至少一年。”
这使得 MV2 的生命周期在 2022 年初的某个时候结束。
编辑添加:
他们宣布了一些硬性日期,2022 年 1 月他们停止接受新的 MV2 扩展,但对现有扩展的维护可能会持续到 2023 年 1 月,届时所有扩展都必须是 MV3。
解决方案
我刚刚看到这个问题,因为我只是在使用 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: "///////"
};
(您可以在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
推荐阅读
- php - 在 Laravel 中重构 JSON 对象
- python - maya 独立与 pyside2
- python - 训练高效网络模型时的属性错误
- php - 如何将多个输入插入到按相同数据分组的同一行中
- linux - 将用户输入字符转换为符号:x86_64 程序集
- python - Django 静态文件未加载。错误的错误信息
- python - 映射 dict(来自 rdd)以递归方式更改 Python/PySpark 中的列名
- python-3.x - 如何使 python 文件不可编辑和不可查看的代码?
- session - 是否可以将元素添加到列表中,并且即使在关闭 Emacs 会话之后也可以让列表保存这些值?
- javascript - 如何获取 Javascript 加载的 3D 资源的下载进度?