web-dev-qa-db-fra.com

Comment accéder aux fichiers IndexedDB / LevelDB de Google Chrome?

Je souhaite utiliser IndexedDB de Google Chrome pour conserver les données côté client.

L'idée est d'accéder à IndexedDB en dehors de Chrome, via Node.JS, plus tard. L'arrière-plan est l'idée de suivre le comportement d'utilisation localement et de stocker les données collectées sur le client pour une analyse ultérieure sans serveur principal.

D'après ma compréhension, l'indexDD est implémenté en tant que LevelDB. Cependant, je ne peux pas ouvrir le levelDB avec aucun des outils/bibliothèques comme LevelUp / LevelDown ou leveldb-json .

Je reçois toujours ce message d'erreur:

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 

Quelqu'un peut-il m'aider? Il semble que la mise en œuvre de Chrome soit en quelque sorte spéciale/différente.

34
Chris

Les clés de leveldb sont des séquences binaires arbitraires. Les clients implémentent comparateurs pour définir l'ordre entre les clés. Le comparateur par défaut pour leveldb est quelque chose d'équivalent à strncmp. Le comparateur de Chrome pour le magasin de la base de données indexée est plus compliqué. Si vous essayez d'utiliser une instance leveldb avec un comparateur différent de celui créé avec, vous observerez les clés dans un ordre apparemment aléatoire, l'insertion serait imprévisible ou provoquerait la corruption - chiens et chats vivant ensemble, hystérie de masse. Leveldb vous permet donc de nommer le comparateur (conservé dans la base de données) pour aider à détecter et éviter cette erreur, ce que vous voyez. le code de Chrome nomme son comparateur pour la base de données indexée "idb_cmp1".

Pour inspecter l'une des instances de base de données de base de données indexées de Chrome en dehors de chrome, vous devez implémenter un comparateur compatible. Le code réside dans l'implémentation de Chrome à content/browser/indexed_db/indexed_db_backing_store.cc - et notez qu'il n'y a aucune garantie que cela soit corrigé sur toutes les versions (à part la compatibilité descendante, bien sûr)

39
Joshua Bell