我在从表单添加记录时出现问题。
当我按下按钮调用功能"保存":
var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
var dataBase = null;
function save(){
dataBase = indexedDB.open("bbdd", 1);
dataBase.onupgradeneeded = function (e) {
active = dataBase.result;
};
dataBase.onsuccess = function (e) {
console.log('Database loaded!');
var active = dataBase.result;
var data = active.transaction(["docs"], "readwrite");
var object = data.objectStore("docs");
var request = object.put({
idDoc: document.querySelector("#idDoc").value,
name: document.querySelector("#name").value,
});
request.onerror = function (e) {
alert(request.error.name + '\n\n' + request.error.message);
};
data.oncomplete = function (e) {
idDoc: document.querySelector("#idDoc").value = '';
name: document.querySelector("#name").value ='';
};
}
dataBase.onerror = function (e) {
console.log('Error loading database');
};
}
确定。我在Chrome和Firefox(Windows XP)中测试并且工作正常。数据将添加到数据库中并清除字段。
现在,我构建了cordova项目并在Nexus 5(Android 5.0.1)中运行它:
cordova run android --devices="myId"
在Nexus 5中,donesn无法正常工作。当我点击按钮时,手机什么都不做。数据没有添加到数据库中,字段也没有清除。
我做错了什么?
答案 0 :(得分:1)
我也有这个问题。 Android 5.0.1上似乎存在与浏览器存储相关的错误。 localStorage,webSQL和indexDB会发生此问题。 很多人都在体验这一点:Android 5.0.1 localstorage not persistent。
我做了一个简单的应用程序只是为了测试。我打开应用程序,我只是这样做(我在onDeviceReady
时添加了代码 - 当加载cordova时):
var a = window.localStorage.getItem('test');
alert(a); //will give you undefined first time
if (!a) {
window.localStorage.setItem('test','12345678');
alert(windows.localStorage.getItem('test');
//this will display 12345678 from localstorage evertime
}
如果您在2或3秒后关闭应用程序(强制关闭应用程序)并重新打开它,则localstorage中的test
值仍为undefined
。您可以执行此操作10次,每次都会获得undefined
。如果您在打开应用程序并等待警报后等待10或12秒,您会注意到重新启动应用程序(强制重启)后,数据就在那里,localStorage正常工作。
我在Android 5.0.1上测试了这个,我使用了cordova 3.6.3,cordova 4.0,cordova 5.0。我在安装了Android 4.4.2的平板电脑上进行了相同的测试,并正确设置了localStorage。