2017-09-03 9 views
0

Dexie.JSを使用する方法を把握しよう。たくさんのサンプルが見つかりました。それらはあまりにも複雑に見えません。私は上記のいずれかを実行すると、しかしhttps://github.com/dfahlander/Dexie.js/blob/master/samples/open-existing-db/dump-databases.html投棄のIndexedDBデータ

でDexieでのIndexedDBを探索するための特に興味深い一の具体例があります - 私に言って、それはのIndexedDBデータベースを見ていない「ユーティリティをダンプ」:からThere are databases at the current origin.

開発者向けツールApplication]タブには、ストレージの下で、私は私のIndexedDBデータベースを参照してください。これは、アクセス許可の問題のいくつかの並べ替え

ですか?任意のタブ/ユーザーがindexedDBデータベースにアクセスできますか?私が見てどうあるべきか

? Dexie.jsは、現在の起源に関するデータベース名のリストを取得するために使用する

クローム/オペラであなたに

+2

自分のページに自分の起源を持っています。コンテンツスクリプトはWebページの原点を使用します。 – wOxxOm

答えて

0

ありがとう、非標準APIのwebkitGetDatabaseNamesが(あり)。他のブラウザの場合、DexieはこのAPIをエミュレートします。

クロムブラウザの場合、Dexie.getDatabaseNames()はクロムブラウザ以外のすべてのデータベースを現在の起点に表示しますDexieで作成されたデータベースのみが表示されます。

あなたは基本的に与えること、this issueを見て、各データベースの内容をダンプする必要がある場合:

interface TableDump { 
    table: string 
    rows: any[] 
} 

function export(db: Dexie): TableDump[] { 
    return db.transaction('r', db.tables,()=>{ 
     return Promise.all(
      db.tables.map(table => table.toArray() 
       .then(rows => ({table: table.name, rows: rows}))); 
    }); 
} 

function import(data: TableDump[], db: Dexie) { 
    return db.transaction('rw', db.tables,() => { 
     return Promise.all(data.map (t => 
      db.table(t.table).clear() 
       .then(()=>db.table(t.table).bulkAdd(t.rows))); 
    }); 
} 

は完全にシリアル化するために)JSON.stringify()とJSON.parse(と機能を組み合わせますデータ。延長の

const db = new Dexie('mydb'); 
db.version(1).stores({friends: '++id,name,age'}); 

(async()=>{ 
    // Export 
    const allData = await export (db); 
    const serialized = JSON.stringify(allData); 

    // Import 
    const jsonToImport = '[{"table": "friends", "rows": [{id:1,name:"foo",age:33}]}]'; 
    const dataToImport = JSON.parse(jsonToImport); 
    await import(dataToImport, db); 
})(); 
関連する問題