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.openIDBFactory.deleteDatabase により行われた) データベースのオープンや削除の要求の結果へのアクセスを提供します。

メモ: この機能はウェブワーカー内で利用可能です。

EventTarget IDBRequest IDBOpenDBRequest

インスタンスプロパティ

親の IDBRequest および EventTarget からプロパティを継承しています。

インスタンスメソッド

メソッドはありませんが、親の IDBRequest および EventTarget からメソッドを継承しています。

イベント

親インターフェイスの IDBRequest および EventTarget で定義されているイベントも IDBOpenDBRequest オブジェクトで発生させることができます。

addEventListener() を用いるか、このインターフェイスの oneventname プロパティにイベントリスナーを代入することで、一般のイベントおよび固有のイベントを監視できます。

このインターフェイスに固有のイベントは、以下です。

blocked

データベースへのオープン中の接続が、同じデータベースの versionchange トランザクションをブロックしているとき発火します。onblocked プロパティを用いても利用可能です。

upgradeneeded

現在のバージョンよりも高いバージョン番号でデータベースをオープンしようとしたとき発火します。onupgradeneeded プロパティを用いても利用可能です。

この例では、高いバージョン番号のデータベースをを読み込もうとした場合に、onupgradeneeded ハンドラーによりデータベースの構造を更新します。動く例全体は、To-do Notifications アプリケーションを見てください。(動く例を見る)

js
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

関連情報