8

Firefox 17.0.1 で IndexedDB データベースを開こうとすると、Firebug コンソールにInvalidStateError例外が表示されます。またrequest.onerror、イベントが発生しますが、event.target.errorCode未定義です

if (window.indexedDB) {
    var request = window.indexedDB.open('demo', 1);
    request.onsuccess = function(event) {
        // not raised
    };
    request.onupgradeneeded = function(event) {
        // not raised
    };
    request.onerror = function(event) {
        // raised with InvalidStateError
    };
}

Firefox で IndexedDB を使用した経験のある人はいますか?

アップデート

Firefox 18.0.1 も同じ動作をします。完全なソース

4

4 に答える 4

0

別のトランザクションでオブジェクトストアを作成する必要があります。開いているデータベースとオブジェクトストアトランザクションの作成の両方を同じイベントにまとめます。

また、オブジェクトストアのオプションとしてautoincrementとの両方を使用することはできません。pathどちらかを選択する必要があります。

例を実行するコードは次のとおりです。

    function initDB() {
        if (window.indexedDB) {
            var request = window.indexedDB.open('demo', 1);
            request.onsuccess = function(event) {
                db = event.target.result;
                createObjectStore();
            };
            request.onupgradeneeded = function(event) {
                db = event.target.result;
                $('#messages').prepend('blah blah<br/>');
            };
            request.onerror = function(event) {
                $('#messages').prepend('Chyba databáze #' + event.target.errorCode + '<br/>');
            };
        }
    }

    function createObjectStore() {
        db.close();
        var request = window.indexedDB.open('demo', 2);
        request.onsuccess = function(event) {
            db = event.target.result;
            showDB();
        };
        request.onupgradeneeded = function(event) {
            db = event.target.result;
            $('#messages').prepend('yeah yeah yeah<br/>');
            var store = db.createObjectStore('StoreName', { keyPath: 'id' });
            store.createIndex('IndexName', 'id', { unique: true });
        };
        request.onerror = function(event) {
            $('#messages').prepend('Chyba databáze #' + event.target.errorCode + '<br/>');
        };
    }

行き詰まり始めたら、Firefoxアドオン用に書いたindexeddbコードを見てください-sdk。コードは必要なものよりも複雑ですが、発生する必要のあるすべてのイベント、エラー、およびトランザクションの順序を確認できます。https://github.com/clarkbw/indexed-db-storage

幸運を!

于 2013-02-13T20:13:50.323 に答える