Подтвердить что ты не робот

Как получить доступ к файлам Google Chrome IndexedDB/LevelDB?

Я хочу использовать Google Chrome IndexedDB для сохранения данных на стороне клиента.

Идея заключается в доступе к IndexedDB за пределами chrome, через Node.JS, позже. Фон - это идея отслеживать поведение использования локально и хранить собранные данные на клиенте для последующего анализа без серверного сервера.

По моему мнению, indexedDB реализован как LevelDB. Однако я не могу открыть levelDB с помощью любого из инструментов /libs, таких как 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 как-то особенная/другая.

4b9b3361

Ответ 1

Ключами в leveldb являются произвольные двоичные последовательности. Клиенты реализуют компараторы для определения порядка между ключами. компаратор по умолчанию для leveldb является чем-то эквивалентным strncmp. Хром-компаратор для индексированного хранилища БД более сложный. Если вы попытаетесь использовать экземпляр leveldb с другим компаратором, чем он был создан, вы будете наблюдать за клавишами в кажущемся случайном порядке, вставка будет непредсказуемой или вызовет коррупцию - собаки и кошки, живущие вместе, массовая истерия. Таким образом, leveldb позволяет вам называть компаратор (сохраняется в базе данных), чтобы помочь обнаружить и избежать этой ошибки, и это то, что вы видите. Хром-код называет его компаратор для индексированного DB "idb_cmp1".

Чтобы проверить один из экземпляров DBddb с индексом Chrome, за пределами хрома, вам понадобится реализовать совместимый компаратор. Код живет в реализации Chrome в content/browser/indexed_db/indexed_db_backing_store.cc - и обратите внимание, что нет гарантии, что это исправлено в разных версиях. (Помимо обратной совместимости, конечно)