IndexedDBを初期化する
IndexedDBは、「indexedDB」というグローバル変数を起点としてプログラミングを開始します。また、IndexedDBを用いたプログラミングには、他にもIndexedDBにおけるトランザクションを表す「IDBTransaction」、データを順次フェッチするためのカーソルを表す「IDBCursor」、検索インデックスの範囲を絞り込むための「IDBKeyRange」などのインターフェースを必要とします。
しかしこの記事の執筆時点では、これらのグローバル変数/インターフェースは、多くのブラウザにおいて異なる「ベンダープレフィックス」付きで提供されています。そのため、出来る限り多くのブラウザでこのデモが動作するように、ベンダープレフィックスを総当りで試して、見つかったものを使用するという処理を行っています。
var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.moz_indexedDB || window.msIndexedDB; var IDBCursor = window.IDBCursor || window.webkitIDBCursor || window.mozIDBCursor || window.moz_IDBCursor || window.msIDBCursor; var IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.mozIDBTransaction || window.moz_IDBTransaction || window.msIDBTransaction; var IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.mozIDBKeyRange || window.moz_IDBKeyRange || window.msIDBKeyRange;
IndexedDBを使用するには、まずデータベースをオープンしなくてはなりません。データベースをオープンするためのメソッドはopenですが、このメソッドはすぐに処理が呼び出し元に戻り、実際のオープン処理はバックグラウンドで実行されます。
var req = indexedDB.open(DB_NAME, latestVersion);
IndexedDBには、どんな環境でも使用できる非同期型のAPIと、Web Workers内でのみ使用可能な同期型のAPIがありますが、このデモでは非同期型のAPIを使用しています。IndexedDBでは、非同期で呼び出されるメソッドの戻り値に対して「onsuccess」「onerror」と言ったイベントハンドラを設定することで、非同期処理の終了時に処理を行うことができます。また、非同期処理の結果は、非同期メソッドの戻り値が持つ「result」プロパティに格納されています。
var db; req.onsuccess = function(event) { // オープンしたデータベースはresultプロパティに格納されている db = req.result; ... };
上のように、オープンに成功するとresultプロパティにデータベースオブジェクト(正確にはIDBDatabaseオブジェクト)が格納されています。