2

更新 問題がブロックされていることを発見しました。データベースは常に同じ拡張子で作成およびアップグレードされますが、閉じられません。これで、「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 に問い合わせることができれば、これは解決されます。それは存在しますか?

4

2 に答える 2

0

常にバージョン番号を提供するのが最善だと思います。そうでない場合、データベース構造のアップグレードをどのように管理しますか? そうしないと、クライアント上の同じ db バージョンが別のデータベース構造を持つという状況に陥る可能性が高くなりますが、それはあなたが望むことではないと思います。したがって、バージョン番号を変数に保持することをお勧めします。

また、indexeddb を使用する場合は、以前のすべてのバージョンから現在のバージョンへのアップグレード計画を提供する必要があります。バージョン 4 には特定の構造があることを意味しますが、バージョン 1、2、および 3 と同じ構造を最初から取得できる必要があります。

于 2013-06-11T05:39:48.423 に答える