我正在编写一个 chrome 扩展,用户将使用它来使用 firestore 数据库中托管的内容填写表单。我面临的核心问题是 Chrome 扩展的清单版本 3 似乎不支持任何 google 与 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>
Run Code Online (Sandbox Code Playgroud)
使用 MV3,出于安全原因,不再允许远程托管代码,尽管我尝试链接的脚本是 google 的,并且在加载解压的扩展后尝试这样做会引发错误。
如何将清单版本 3 Chrome 扩展连接到 firestore 数据库?
我花了很多时间尝试在本地提取 cdn 脚本,然后将它们直接导入到我的系统中,background.js如下所示:
try {
importScripts('firebase/firebase-firestore.js');
} catch (error) {
console.log(error);
}
Run Code Online (Sandbox Code Playgroud)
这种方法让我陷入了困境,因为这也行不通,但显然出于不同的原因。具体来说,对于 MV3,Service Worker 不支持 XMLHttpRequest。
从我完成的阅读来看,我真的希望这里有人能指出我错过的一些东西,看来不可能将 firestore 直接连接到扩展。我在其他地方读到可以通过 MV3 chrome 扩展访问firebase 实时数据库。
在 firestore 和实时数据库之间建立一些链接,以便我们的用户需要能够使用 chrome 扩展程序访问相关内容,然后将实时数据库连接到扩展程序似乎是下一步。这可行吗?
只是为了让我们的应用程序面向未来,我们不想在 …
javascript google-chrome google-chrome-extension firebase google-cloud-firestore
我构建了一个从 firestore 获取数据的 PWA。我想每隔几个小时对这些数据进行一些检查,这就是为什么我想为此使用服务工作者。
这是我的工作代码的片段:
billsCollection.orderBy('dayOfMonth', 'asc').onSnapshot(querySnapshot => {
let billsArray = [];
querySnapshot.forEach(doc => {
let bill = doc.data();
bill.id = doc.id;
billsArray.push(bill);
});
store.commit('setBills', billsArray);
});
Run Code Online (Sandbox Code Playgroud)
如果我尝试在服务工作线程中运行 .onSnapshot,我会收到一条消息:xmlhttprequest 未知或类似。
似乎“firebase/app”和“firebase/firestore”使用旧的 xmlhttprequest 与 firebase/firestore 进行通信。Service Workers 仅支持较新的 fetch api。在使用新的 fetch api 之前,有人成功从 firebase/firestore 获取数据吗?
我想使用服务工作者定期从 firebase 获取数据。
如果这不起作用,是否可以使用 Cloud Firestore 功能检查您的数据?我不确定,因为它需要时间事件触发器或类似的东西。
谢谢大家的想法,约翰内斯
编辑:
正如 Scarygami 指出的那样,我可以通过使用触发 firestore 功能的 cron 服务来解决这个问题。这有效。尽管如此,我仍在寻找一种直接使用服务工作者从 firestore 获取数据的方法。然后我就不需要第三方 cron 服务或云功能以及我想要向其发送消息的设备的特定令牌。它只会获取数据、检查数据、在需要时显示通知。
javascript fetch firebase service-worker google-cloud-firestore