LoginSignup
1
0

More than 5 years have passed since last update.

onupgradeneededが呼ばれず、deleteObjectStoreができないとき

Posted at

備忘。
deleteObjectStoreを行おうとしたら、「バージョン変更」を行った時のコールバック内(onupgradeneeded)でしか行えないよといわれた。
なのでDBをOpenする際に以下の様にバージョンを変えて開いたが、onupgradeneededが呼ばれない。しかしonerrorもonsuccessも呼ばれない。

var dbVersion;
var db;
function deleteObjectStore(){
    console.log("オブジェクトストア削除開始");
    var indexedDB = window.indexedDB || window.mozIndexedDB || window.msIndexedDB || window.webkitIndexedDB;
    // DBのバージョンを上げる
    dbVersion++;
    var DBOpenRequest = indexedDB.open("download", dbVersion);
    DBOpenRequest.onupgradeneeded = function(event) {
        var req = event.target.result;
        // オブジェクトストアを削除
        req.deleteObjectStore("myStore");
    }
    DBOpenRequest.onerror = function(event){
        console.log("error");
    }
    DBOpenRequest.onsuccess = function(event){
        db = event.target.result;
        console.log("DBバージョン : " + db.version);
    }
}

なぜだと思っていたら、DBをクローズしていないからでした。
db.close()を追加します。

var dbVersion;
var db;
function deleteObjectStore(){
    console.log("オブジェクトストア削除開始");
    // DBを閉じる
    db.close();
    var indexedDB = window.indexedDB || window.mozIndexedDB || window.msIndexedDB || window.webkitIndexedDB;
    // DBのバージョンを上げる
    dbVersion++;
    var DBOpenRequest = indexedDB.open("download", dbVersion);
    DBOpenRequest.onupgradeneeded = function(event) {
        var req = event.target.result;
        // オブジェクトストアを削除
        req.deleteObjectStore("myStore");
    }
    DBOpenRequest.onerror = function(event){
        console.log("error");
    }
    DBOpenRequest.onsuccess = function(event){
        db = event.target.result;
        console.log("DBバージョン : " + db.version);
    }
}

これで無事、指定のオブジェクトストアが削除できました。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0