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

Je veux utiliser L'IndexedDB de Google Chrome pour persister les données du côté client.

L'idée est d'accéder à la base de données indexée en dehors de chrome, via un noeud.JS, plus tard. L'arrière-plan est l'idée de suivre les habitudes d'utilisation localement et stocker les données collectées sur le client pour une analyse ultérieure sans un serveur backend.

D'après ce que j'ai compris, la base de données indexée est implémentée comme une base de données de niveau. Cependant, je ne peux pas ouvrir le levelDB avec l'un des outils / libs 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 aider? Il semble que L'implémentation de Chrome soit en quelque sorte spéciale/différente.

25
demandé sur kenorb 2016-01-29 03:12:29

1 réponses

Les clés de leveldb sont des séquences binaires arbitraires. Clients de mettre en place comparateurs définir l'ordre entre les touches. comparateur par défaut pour leveldb est quelque chose d'équivalent à strncmp. Le comparateur de Chrome pour le magasin de DB indexé est plus compliqué. Si vous essayez d'utiliser une instance leveldb avec un comparateur différent de celui qui a été créé avec vous observerez les clés dans un ordre apparemment aléatoire, l'insertion serait imprévisible ou causerait de la corruption-chiens et chats vivre ensemble, l'hystérie de masse. Ainsi leveldb vous permet de nommer le comparateur (persistened to the database) pour aider à détecter et éviter cette erreur, qui est ce que vous voyez. les noms de code de Chrome son comparateur pour DB indexé "idb_cmp1".

pour inspecter une des instances de niveau DB indexé de Chrome en dehors de chrome, vous devez implémenter un comparateur compatible. Le code vit dans L'implémentation de Chrome à content/browser/indexed_db / indexed_db_backing_store.cc-et note qu'il n'y a aucune garantie que cela est corrigé dans les versions. (À l'exception de la compatibilité ascendante, bien sûr)

26
répondu Joshua Bell 2016-02-01 23:08:33