IndexedDB onupgradeneeded iOS上的事件目标为null

时间:2016-05-03 09:40:47

标签: ios cordova indexeddb

我正在开发一个带有IndexedDB数据库的iOS Cordova应用程序。这是我打开数据库的代码:

indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB || window.shimIndexedDB;

            window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction;
            window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange;
            if (!indexedDB) {
                window.alert("Your browser doesn't support a stable version of IndexedDB.");
            }

            console.log("openDb ...");
            var req = indexedDB.open(insectDbName, 21);
            console.log(req);

            req.onsuccess = function(evt) {
                debugger;
                db = this.result;
                console.log("openDb DONE");
            };
            req.onerror = function(evt) {
                //debugger;
                console.error("openDb: ", evt.target.errorCode);
            };

            req.onupgradeneeded = function(evt) {
                console.log("openDb.onupgradeneeded");

                //debugger;


                var versionStore = evt.currentTarget.result.createObjectStore(versionStoreName, { autoIncrement : true});
                console.log("versionStore created");
            };

现在,我的问题是,当我打开数据库时,请求不是IDBOpenRequest对象。但事件正在发生。当我使用新版本号打开数据库时,将调用onupgradeneeded事件。当我使用当前版本打开时,会调用onsuccess事件。 问题是,永远不会创建对象库,因为在onupgradeneeded事件中,evt.currentTarget为空。

我已经包含了IndexedDBshimCordova IndexedDB Plugin,但它仍无效。

有没有人遇到过类似的问题?

1 个答案:

答案 0 :(得分:0)

好的,我发现了问题。我不得不使用evt.target而不是evt.currentTarget