IDBTransaction: mode プロパティ

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.

IDBTransaction インターフェイスの読み取り専用プロパティ mode は、トランザクションの対象におけるオブジェクトストア内のデータにアクセスする現在のモードを返します。(すなわち、モードが読み取り専用なのか、オブジェクトストアに書き込みを行いたいか) デフォルト値は readonly です。

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

現在のオブジェクトストア内のデータへのアクセスを分離するためのモードを定義するオブジェクトです。 すなわち、現在のオブジェクトストア内のデータへのアクセスを分離するためのモードを定義する文字列です。 以下の値をとりえます。

readonly

データの読み込みはできますが、変更はできません。

readwrite

変更対象の既存のデータストア内のデータの読み書きができます。

versionchange

オブジェクトストアやインデックスの削除と作成を含む、任意の操作ができます。 このモードは、IDBDatabase.setVersion() により開始されたトランザクションでバージョン番号を更新する用です。 このモードのトランザクションは、他のトランザクションと並行で実行することはできません。 このモードのトランザクションは、アップグレードトランザクション として知られています。

以下のコード断片では、データベースの読み書きトランザクションを開き、オブジェクトストアにデータを追加します。トランザクションのイベントハンドラーに設定された関数により、成功時または失敗時にトランザクションを開いた結果を報告する点にも注目してください。最後に、mode を用いて現在のトランザクションのモードを記録します。動く例全体は、To-do Notifications アプリケーションを参照してください。(動く例を見る)

js
const note = document.getElementById("notifications");

// IDB データを保存する用の db オブジェクトのインスタンス
let db;

// データベースを開く
const DBOpenRequest = window.indexedDB.open("toDoList", 4);

DBOpenRequest.onsuccess = (event) => {
  note.innerHTML += "<li>データベースを初期化しました。</li>";

  // データベースを開いた結果を変数 db に格納する
  // これは後でよく使う
  db = DBOpenRequest.result;

  // addData() 関数を実行し、データをデータベースに追加する
  addData();
};

function addData() {
  // IDB に挿入できる新しいオブジェクトを生成する
  const newItem = [
    {
      taskTitle: "Walk dog",
      hours: 19,
      minutes: 30,
      day: 24,
      month: "December",
      year: 2013,
      notified: "no",
    },
  ];

  // データベースの読み書きトランザクションを開き、データを追加する準備をする
  const transaction = db.transaction(["toDoList"], "readwrite");

  // トランザクションを開くのに成功したら報告する
  transaction.oncomplete = (event) => {
    note.innerHTML +=
      "<li>トランザクション完了: データベースの変更が完了しました。</li>";
  };

  transaction.onerror = (event) => {
    note.innerHTML +=
      "<li>トランザクションはエラーのため開けませんでした。アイテムは重複させられません。</li>";
  };

  // トランザクション上でオブジェクトストアを生成する
  const objectStore = transaction.objectStore("toDoList");

  // オブジェクトストアに newItem オブジェクトを追加する
  const objectStoreRequest = objectStore.add(newItem[0]);

  objectStoreRequest.onsuccess = (event) => {
    // 要求の成功を報告する (これは、アイテムがデータベースにに正常に格納されたことを意味しません。
    // これを知るには、transaction.onsuccess を用いる必要があります)
    note.innerHTML += "<li>要求に成功しました。</li>";
  };

  // トランザクションが開かれたモードを返す (この場合は "readwrite" のはず)
  transaction.mode;
}

仕様書

Specification
Indexed Database API 3.0
# ref-for-dom-idbtransaction-mode①

ブラウザーの互換性

BCD tables only load in the browser

関連情報