使用需要与IndexedDB集成的Chrome扩展程序。试图弄清楚如何使用Dexie.JS
。找到了一堆样品。那些看起来并不太复杂。在https://github.com/dfahlander/Dexie.js/blob/master/samples/open-existing-db/dump-databases.html
但是,当我运行上面的那个 - “转储实用程序”时,它没有看到IndexedDB数据库,告诉我:There are databases at the current origin.
在开发人员工具Application
标签下的“存储”下,我看到了IndexedDB
数据库。
这是某种权限问题吗?是否可以通过任何选项卡/用户访问任何indexedDB数据库?
我应该看什么?
谢谢
答案 0 :(得分:0)
在chrome / opera中,有一个非标准API webkitGetDatabaseNames(),Dexie.js用它来检索当前源上的数据库名称列表。对于其他浏览器,Dexie通过为每个源保留最新的数据库名称数据库来模拟此API,因此:
对于Chrome浏览器,Dexie.getDatabaseNames()将列出当前来源的所有数据库,但对于非铬浏览器,只会显示使用Dexie创建的数据库。
如果您需要转储每个数据库的内容,请查看this issue,基本上给出:
interface TableDump {
table: string
rows: any[]
}
function export(db: Dexie): TableDump[] {
return db.transaction('r', db.tables, ()=>{
return Promise.all(
db.tables.map(table => table.toArray()
.then(rows => ({table: table.name, rows: rows})));
});
}
function import(data: TableDump[], db: Dexie) {
return db.transaction('rw', db.tables, () => {
return Promise.all(data.map (t =>
db.table(t.table).clear()
.then(()=>db.table(t.table).bulkAdd(t.rows)));
});
}
将函数与JSON.stringify()和JSON.parse()结合使用,以完全序列化数据。
const db = new Dexie('mydb');
db.version(1).stores({friends: '++id,name,age'});
(async ()=>{
// Export
const allData = await export (db);
const serialized = JSON.stringify(allData);
// Import
const jsonToImport = '[{"table": "friends", "rows": [{id:1,name:"foo",age:33}]}]';
const dataToImport = JSON.parse(jsonToImport);
await import(dataToImport, db);
})();