我使用cordova构建混合Android应用程序,我使用此函数返回数据库对象,它在应用程序中无处不在
function openDB() {
var dbUser = null;
var dBVersion = localStorage.getItem("db_version");
if (dBVersion == null) {
try {
if (!window.openDatabase) {
console.log('db init failed');
} else {
dbUser = window.openDatabase("dbname", "1.0.1", "local", 100000);
}
} catch(error) {
console.log(e);
if (e.name == "INVALID_STATE_ERR") {
console.log("Invalid database version.");
} else {
console.log("Unknown error " + e + ".");
}
}
} else {
dbUser = window.openDatabase("dbname", dBVersion, "local", 100000);
}
console.log(dbUser);
//initialize tables
if (dbUser != null)
createTables(dbUser);
return dbUser;
}
但是当我使用像facebook和foursquare这样的社交插件并返回应用程序时,我的应用程序将无法访问数据库并给出错误
Uncaught Error: SECURITY_ERR: DOM Exception 18 at file:///android_asset/www/js/DB.js:27
dbUser = window.openDatabase("dbname", dBVersion, "local", 100000);
并且我的应用程序变为空白,因为它无法访问数据库。
答案 0 :(得分:0)
你什么时候执行你的代码?
如果您查看此post,则只应在设备准备好后执行数据库查询。所以等待从cordova触发的deviceready
事件。
document.addEventListener("deviceready", openDB, false);
请注意,这只会在手机上触发,而不会在浏览器上触发。
我认为对于较旧的cordova版本,数据库大小也有限制。 100000
似乎很随意,不是吗?
希望这有帮助。