iOS 上的 IndexedDB onupgradeneeded 事件目标为空
IndexedDB onupgradeneeded Event target is null on iOS
我正在为 iOS 开发一个 Cordova 应用程序,后台有一个 IndexedDB 数据库。这是我打开数据库的代码:
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
为空。
我已经添加了 IndexedDBshim and the Cordova IndexedDB Plugin 但它仍然无法正常工作。
有没有人遇到过类似的问题?
好的,我找到问题了。我不得不使用 evt.target
而不是 evt.currentTarget
。
我正在为 iOS 开发一个 Cordova 应用程序,后台有一个 IndexedDB 数据库。这是我打开数据库的代码:
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
为空。
我已经添加了 IndexedDBshim and the Cordova IndexedDB Plugin 但它仍然无法正常工作。
有没有人遇到过类似的问题?
好的,我找到问题了。我不得不使用 evt.target
而不是 evt.currentTarget
。