我想使用Google Chrome浏览器的IndexedDB在客户端保留数据。
想法是稍后通过Node.JS访问chrome之外的IndexedDB。背景技术是在本地跟踪使用行为并将收集的数据存储在客户端上以供以后在没有服务器后端的情况下进行分析的想法。
据我了解,indexedDB是作为LevelDB实现的。但是,我不能与任何工具打开性LevelDB /库一样的LevelUp / LevelDown或性LevelDB JSON的。
我总是收到以下错误消息:
leveldb-dump-to-json --file test.json --db https_www.reddit.com_0.indexeddb.leveldb events.js:141 throw er; // Unhandled 'error' event ^ OpenError: Invalid argument: idb_cmp1 does not match existing comparator : leveldb.BytewiseComparator at /usr/local/lib/node_modules/leveldb- json/node_modules/levelup/lib/levelup.js:114:34 Christians-Air:IndexedDB
有人可以帮忙吗?Chrome的实现似乎有些特殊/不同。
leveldb中的键是任意二进制序列。客户端实现比较器以定义键之间的顺序。leveldb 的默认比较器等效于strncmp。Chrome的Indexed DB存储区的比较器更为复杂。如果尝试将leveldb实例与比较器创建的比较器不同,则将以随机的顺序观察密钥,则插入将不可预测或导致损坏- 狗和猫在一起生活,歇斯底里。因此,leveldb可让您命名比较器(持久化到数据库)以帮助检测和避免此错误,这正是您所看到的。Chrome的代码将其索引数据库的比较器命名为 “ idb_cmp1”。
strncmp
要检查Chrome之外的Chrome的索引数据库leveldb实例之一,您需要实现一个兼容的比较器。该代码位于Chrome的实现中,位于content / browser / indexed_db / indexed_db_backing_store.cc中,并且请注意,不能保证此版本在各个版本中均已解决。(当然,除了向后兼容之外)