2

setVersion を使用して次のコードを chrome で動作させようとしています (onupgradeneeded はまだ利用できないため)。

IDBVersionChangeRequest は IDBDatabaseException で満たされます。また、onsuccess 関数を呼び出すことができませんでした。onsuccess 関数内に ObjectStore を作成する必要があります。

具体的には次の行: request = browserDatabase._db.setVersion(browserDatabase._dbVersion.toString());

以下は私のコードです。どんな助けでも大歓迎です...

browserDatabase._db = null;
browserDatabase._dbVersion = 4;
browserDatabase._dbName = "mediaStorageDB";
browserDatabase._storeName = "myStore";

var request = indexedDB.open(browserDatabase._dbName);

// database exist
request.onsuccess = function(e) 
{
    browserDatabase._db = e.target.result;

    // this is specifically for chrome, because it does not support onupgradeneeded
    if (browserDatabase._dbVersion != browserDatabase._db.version)
    {
        request = browserDatabase._db.setVersion(browserDatabase._dbVersion.toString());

        request.onerror = function(e) { alert("error") };

        request.onblocked = function(e)
        {
           b = 11;  // for some reason the code goes here...
        }

        request.onsuccess = function(e)
        {
            browserDatabase._db.createObjectStore(browserDatabase._storeName, {autoIncrement: true});
        }
    }

}
4

2 に答える 2

2

あなたのコード サンプルでは、​​onblocked コールバックに入ると言います。このコールバックを取得できる唯一の方法は、データベースへのトランザクション/接続がまだ開いている場合です。(作業中のものは別として。)これは、setVersion を呼び出す前に、他のすべてのトランザクション/接続を閉じる必要があることを意味します。

于 2012-10-25T05:04:24.107 に答える
0

IndexedDBに有線の問題が発生した場合、「ホストされているアプリからデータを消去」し、Chromeウィンドウを終了して、コーヒーを飲みます。その後、すべてが正常に機能します。:-D

browserDatabase._dbVersion < browserDatabase._db.version。ダウングレードはできません。dbVersion = 4軽く考えるべきではありません。で他のタブを開くdbVersion = 5か、ブラウザが他の場所で応答を放棄しているか、それ自体が更新されている可能性があります。これらはすべて、背後にある理由を追跡する価値はありません。

于 2012-10-25T01:06:52.407 に答える