如何在Chrome扩展程序的Service Workers中使用IndexedDB

8

我正在愉快地将一些Chrome扩展程序重建为MV3。但我卡住了,因为我不知道如何从服务工作者中使用IndexedDB

更具体地说,我没有找到任何可以正常访问JS服务工作者脚本的IndexedDB访问实例。

参考这个页面,我曾像这样打开一个数据库:

var idb = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB || window.shimIndexedDB;
var dbName = "DatabaseName";
var open = idb.open(dbName, 1);

但众所周知,在MV3中,服务工作者无法再从window中访问。

简单来说,背景页为扩展程序作者提供了一个独立于任何其他窗口或选项卡的环境。

(https://developer.chrome.com/docs/extensions/mv3/migrating_to_service_workers/#state)

那么我该如何做呢?

感谢您的帮助、时间和耐心。祝您周末愉快!

1个回答

12
答案比我想象的简单。当在服务工作者中使用时,indexedDB已经定义好了,不需要与窗口对象相关联。它是可以直接使用的。
var dbName = "DatabaseName";
var open = indexedDB.open(dbName, 1);

我会把这个问题留下来,以防其他人有同样的疑问。

通常带有 window.xxx 的示例假定所有的网络浏览器都包括 IE,这对于仅在现代浏览器中运行的 Chrome 扩展来说是不必要的,因此可以直接访问 API,假设它在规范或 MDN 中为工作者公开(请参见兼容性表)。 - wOxxOm
1
我能让它正常工作的唯一方法是在v3清单中添加storage或unlimitedStorage权限。否则,我会收到误导性的错误提示。 - Volomike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接