查看所有IndexedDB数据库和对象存储

23
我正在使用IndexedDB开发一个Windows 8应用,对此两者都非常陌生。我已经成功地创建、读取、更新和删除了对象存储中的对象,并创建了一些数据库和几个对象存储。我的问题是如何列出所有的对象存储和数据库?我创建了一些不需要的虚假对象存储,我想稍微整理一下,但我记不起它们的名称。也许这有点过于苛求,但似乎应该可以列出所有的数据库和存储。谢谢!
4个回答

41

在撰写本文时 [chrome 72],您可以在浏览器控制台中使用以下命令列出所有数据库。基本上,indexedDB.databases()是一个Promise。您可以使用它将所有数据库的列表作为数组获取。在数组上运行循环以获取数据库名称。

indexedDB.databases().then(r => console.log(r))

希望这有所帮助


indexedDB.databases() 也可以在 Chrome 中以编程方式使用。 - Velojet
6
MDN参考文档:IDBFactory.databases。注意浏览器支持有限。 - medmunds

20

编辑于2018年,此答案不再适用:

webkitGetDatabaseNames() 在Chrome 60中被弃用


在Chrome的Webkit中,有一个函数可以返回所有数据库名称,但自Chrome 60(webkitgetdatabasenames)起,该函数已不再可用:
indexedDB.webkitGetDatabaseNames().onsuccess = function(sender,args) { 
  console.log(sender.target.result); 
};

还有另一个函数,可以列出单个数据库中所有对象存储,适用于所有浏览器:

indexedDB.open(databaseName).onsuccess = function(sender, args) { 
  console.log(sender.target.result.objectStoreNames); 
};

3
在Chrome 60中,webkitGetDatabaseNames()已被弃用。 - xkeshav

15
目前无法枚举标准中现有的数据库。Windows 8应用程序使用IE,该浏览器不提供非标准的webkitGetDatabaseNames方法。您可以尝试使用IE10选项对话框清除数据库。
通过IDBDatabase实例的objectStoreNames方法定义了列出数据库中存储的内容。

1
正确的,我认为有一个getDatabaseNames方法会很危险。这样黑客就可以轻松地搜索客户端上存在的数据库。 - Kristof Degrave
2
@KristofDegrave 不,这不是问题,因为您无法对indexedDB进行跨域访问。 - user1133275
1
@user1133275 同源策略并不能保护您免受攻击者通过 XSS 访问它的侵害。如果他们通过诸如 SQL 注入之类的方式将脚本注入到您的页面中,他们的脚本将在页面中本地运行,并能够访问它,然后将该信息发送到其他地方。 - Useless Code

6

由于所有其他主题都被引用为重复项,因此在Chrome中,您可以在开发者工具>应用程序>存储 中查看并删除所有创建的数据库。

要查看IndexedDB内部:chrome://indexeddb-internals/


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