Получение «setVersion» не является ошибкой функции при использовании indexedDB

Я попытался использовать следующий код для проверки производительности IndexedDB. Код изменен из http://www.html5rocks.com/en/tutorials/indexeddb/todo/ , Он хорошо работает в Chrome, но не работает в Firefox 10, говоря, что «db.setVersion не является функцией». Я хочу знать, как изменить код, чтобы он работал в firefox?

        var count=0;
        var MAX=10;
        var times=3;
        var allTime;
        var stime;
        var etime;

        var html5rocks = {};
        var indexedDB = window.indexedDB || window.webkitIndexedDB ||
                        window.mozIndexedDB;

        if ('webkitIndexedDB' in window) {
            window.IDBTransaction = window.webkitIDBTransaction;
            window.IDBKeyRange = window.webkitIDBKeyRange;
        }

        html5rocks.indexedDB = {};
        html5rocks.indexedDB.db = null;

        html5rocks.indexedDB.onerror = function(e) {
            //console.log(e);
            alert("Why didn't you allow my web app to use IndexedDB?!");  
        };

        html5rocks.indexedDB.open = function(type) {

        var request = indexedDB.open("todos");
            request.onsuccess = function(e) {
            var v = "1.20";
            html5rocks.indexedDB.db = e.target.result;
            var db = html5rocks.indexedDB.db;
            // We can only create Object stores in a setVersion transaction;
            if (v!= db.version) {

                var setVrequest = db.setVersion(v);
                // onsuccess is the only place we can create Object Stores
                setVrequest.onerror = html5rocks.indexedDB.onerror;
                setVrequest.onsuccess = function(e) {
                    if(db.objectStoreNames.contains("todo")) {
                        db.deleteObjectStore("todo");
                    }

                    var store = db.createObjectStore("todo",
                        {keyPath: "number"});
                        addTest();
                };

            }
            else addTest();
            };

            request.onerror = html5rocks.indexedDB.onerror;

        }

        html5rocks.indexedDB.addTodo = function(todoText,num) {
            var db = html5rocks.indexedDB.db;
            var trans = db.transaction(["todo"], IDBTransaction.READ_WRITE);
            var store = trans.objectStore("todo");

            var data = {
            "text": todoText,
            "number": num
            };

            var request = store.put(data);

            request.onsuccess = function(e) {
                count++;
                if(count>=times*MAX)
                {
                    etime=new Date;
                    var t=document.getElementById('result').innerHTML;
                    document.getElementById('result').innerHTML=t+((etime.valueOf()-stime.valueOf())/times)+"
"; allTime=0;stime=new Date;count=0; getTest(); } }; request.onerror = function(e) { console.log("Error Adding: ", e); }; }; html5rocks.indexedDB.getTodo = function(id) { var db = html5rocks.indexedDB.db; var trans = db.transaction(["todo"], IDBTransaction.READ_WRITE); var store = trans.objectStore("todo"); var request = store.get(id); request.onsuccess = function(e) { count++; if(count>=times*MAX) { etime=new Date; var t=document.getElementById('result').innerHTML; document.getElementById('result').innerHTML=t+((etime.valueOf()-stime.valueOf())/times)+"
"; allTime=0;stime=new Date;count=0; delTest(); } }; request.onerror = function(e) { console.log("Error getting: ", e); }; }; html5rocks.indexedDB.deleteTodo = function(id) { var db = html5rocks.indexedDB.db; var trans = db.transaction(["todo"], IDBTransaction.READ_WRITE); var store = trans.objectStore("todo"); var request = store.delete(id); request.onsuccess = function(e) { count++; if(count>=times*MAX) { etime=new Date; var t=document.getElementById('result').innerHTML; document.getElementById('result').innerHTML=t+((etime.valueOf()-stime.valueOf())/times)+"
"; allTime=0;stime=new Date;count=0; dataTest(); } }; request.onerror = function(e) { console.log("Error Adding: ", e); }; }; html5rocks.indexedDB.addData = function(d) { var db = html5rocks.indexedDB.db; var trans = db.transaction(["todo"], IDBTransaction.READ_WRITE); var store = trans.objectStore("todo"); var data={ "text":d, "number":1 }; var request = store.put(data); request.onsuccess = function(e) { etime=new Date; var t=document.getElementById('result').innerHTML; document.getElementById('result').innerHTML=t+((etime.valueOf()-stime.valueOf()))+"
"; }; request.onerror = function(e) { console.log("Error Adding: ", e); }; }; function addTest() { for(i=1;i<=times*MAX;i++) html5rocks.indexedDB.addTodo(' ',i); } function getTest() { for(i=1;i<=times*MAX;i++) html5rocks.indexedDB.getTodo(Math.round(Math.random()*(MAX*times-1)+1)); } function delTest() { for(i=1;i<=times*MAX;i++) html5rocks.indexedDB.deleteTodo(i); } function dataTest() { data=' '; for(i=1;i<=21;i++) data=data+data; stime=new Date html5rocks.indexedDB.addData(data); } function init() { stime=new Date; allTime=0; html5rocks.indexedDB.open(); }

5
задан Josh 25 June 2014 в 00:40
поделиться