IDBOpenDBRequest
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.
IndexedDB API の IDBOpenDBRequest
インターフェイスは、固有のイベントハンドラー属性を用い、(IDBFactory.open
や IDBFactory.deleteDatabase
により行われた) データベースのオープンや削除の要求の結果へのアクセスを提供します。
メモ: この機能はウェブワーカー内で利用可能です。
インスタンスプロパティ
親の IDBRequest
および EventTarget
からプロパティを継承しています。
インスタンスメソッド
メソッドはありませんが、親の IDBRequest
および EventTarget
からメソッドを継承しています。
イベント
親インターフェイスの IDBRequest
および EventTarget
で定義されているイベントも IDBOpenDBRequest
オブジェクトで発生させることができます。
addEventListener()
を用いるか、このインターフェイスの oneventname
プロパティにイベントリスナーを代入することで、一般のイベントおよび固有のイベントを監視できます。
このインターフェイスに固有のイベントは、以下です。
blocked
-
データベースへのオープン中の接続が、同じデータベースの
versionchange
トランザクションをブロックしているとき発火します。onblocked
プロパティを用いても利用可能です。 upgradeneeded
-
現在のバージョンよりも高いバージョン番号でデータベースをオープンしようとしたとき発火します。
onupgradeneeded
プロパティを用いても利用可能です。
例
この例では、高いバージョン番号のデータベースをを読み込もうとした場合に、onupgradeneeded
ハンドラーによりデータベースの構造を更新します。動く例全体は、To-do Notifications アプリケーションを見てください。(動く例を見る)
let db;
// 我々のデータベースを開きましょう
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
// これらのイベントハンドラーは、開かれているデータベースを扱います
DBOpenRequest.onerror = (event) => {
note.innerHTML += "<li>データベースの読み込み中にエラーが発生しました。</li>";
};
DBOpenRequest.onsuccess = (event) => {
note.innerHTML += "<li>データベースの初期化が完了しました。</li>";
// データベースを開いた結果を変数 db に格納します。
// これは後でたくさん使います。
db = DBOpenRequest.result;
// IDB に既に入っている TO-DO リストのデータ全てを
// タスクリストに入れるため、displayData() 関数を実行します。
displayData();
};
// このイベントは、データベースがまだ作成されていないか、
// 上の window.indexedDB.open の行で新しいバージョン番号が
// 指定されたかで、新しいバージョンのデータベースを
// 作成する必要がある場合を扱います。
// これは最近のブラウザーでしか実装されていません。
DBOpenRequest.onupgradeneeded = (event) => {
const db = event.target.result;
db.onerror = (event) => {
note.innerHTML +=
"<li>データベースの読み込み中にエラーが発生しました。</li>";
};
// このデータベース用の objectStore を作成します
const objectStore = db.createObjectStore("toDoList", {
keyPath: "taskTitle",
});
// objectStore にどのようなアイテムを保存するかを定義します
objectStore.createIndex("hours", "hours", { unique: false });
objectStore.createIndex("minutes", "minutes", { unique: false });
objectStore.createIndex("day", "day", { unique: false });
objectStore.createIndex("month", "month", { unique: false });
objectStore.createIndex("year", "year", { unique: false });
objectStore.createIndex("notified", "notified", { unique: false });
};
仕様書
Specification |
---|
Indexed Database API 3.0 # idbopendbrequest |
ブラウザーの互換性
BCD tables only load in the browser
関連情報
- IndexedDB の使用
- トランザクションの開始s:
IDBDatabase
- トランザクションの使用:
IDBTransaction
- キーの範囲の設定:
IDBKeyRange
- データの取得と変更:
IDBObjectStore
- カーソルの使用:
IDBCursor
- リファレンス例: To-do Notifications (動く例を見る)