我想使用Google Chrome的IndexedDB在客户端保留数据。
想法是稍后通过Node.JS访问chrome之外的IndexedDB。
背景技术是在本地跟踪使用行为并将收集的数据存储在客户端上以供以后在没有服务器后端的情况下进行分析的想法。
据我了解,indexedDB是作为LevelDB实现的。但是,我无法使用LevelUp/LevelDown或leveldb-json之类的任何工具/库打开levelDB。
我总是收到以下错误消息:
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中的键是任意二进制序列。客户端实现comparators来定义键之间的顺序。 leveldb的default comparator与strncmp
等效。 Chrome的Indexed DB存储区的比较器更为复杂。如果尝试将leveldb实例与比较器创建的比较器使用的实例不同,则观察到的键看起来似乎是随机的,那么插入将是不可预测的,否则会导致损坏-狗和猫在一起生活,会产生歇斯底里的情况。因此,leveldb可让您命名比较器(持久化到数据库),以帮助检测和避免此错误,这正是您所看到的。 Chrome's code names its comparator for Indexed DB“idb_cmp1”。
要检查Chrome之外的Chrome的索引数据库leveldb实例之一,您需要实现兼容的比较器。该代码位于Chrome的实现中,位于content/browser/indexed_db/indexed_db_backing_store.cc中,并且请注意,不能保证此版本在各个版本中均已解决。 (当然,除了向后兼容之外)