更新 問題がブロックされていることを発見しました。データベースは常に同じ拡張子で作成およびアップグレードされますが、閉じられません。これで、「onblocked」関数が呼び出されました。
現在ブロックされているデータベースを「ブロック解除」するにはどうすればよいですか? また、今後これを防ぐにはどうすればよいですか?これはアプリなので、タブは使用していません。そして、それらのデータベースを開いて削除することさえできないので (これもブロックされます)、どうすればそれらを閉じることができますか?
(疑問に思っている人のために、最初からこの問題を回避するには、次のことを行う必要があります:)
mydb.onversionchange = function(event) {
mydb.close();
};
元の投稿
(誤って) 開いて間違ったバージョンでアップグレードしようとすると、IndexedDB が停止し、開けなくなります。私が知る限り、indexedDB に最新バージョンの DB を問い合わせる方法はありません。したがって、次のコードを 2 回実行しようとすると、データベースが破壊され、開くことができなくなります。
また、エラーをスローしたり、onerror を呼び出したりすることはありません。ただ静かに座っている
var db = null;
//Note, no version passed in, so the second time I do this, it seems to cause an error
var req = indexedDB.open( "test" );
req.onsuccess = function(event) { console.log( "suc: " + event.target.result.version ); db = event.target.result; };
req.onerror = function(event) { console.log( "err: " + event ); };
req.onupgradeneeded = function(event) { console.log( "upg: " + event.target.result.version ); };
//We're doing in interval since waiting for callback
var intv = setInterval(
function()
{
if ( db === null ) return;
clearInterval( intv );
var req2 = indexedDB.open( "test", db.version + 1 );
req2.onsuccess = function(event) { console.log( "suc: " + event.target.result.version ); };
req2.onerror = function(event) { console.log( "err: " + event ); };
req2.onupgradeneeded = function(event) { console.log( "upg: " + event.target.result.version ); };
},
50
);
そのコードはすべて私のchrome.runtime.onInstalled.addListener
. そのため、アプリを更新すると、再度呼び出されます。新しいバージョンを渡さずに呼び出しindexedDB.open( "test" )
て setInterval 関数を再度実行すると、すべてが使用できなくなり、「テスト」を再び開くことができなくなります。データベースを開こうとする前に、データベースのバージョンを indexedDB に問い合わせることができれば、これは解決されます。それは存在しますか?