我正在尝试在Chrome中创建书签扩展程序,我想利用WebSQL在本地存储有关书签的所有类型的信息。这是我到目前为止所做的:
(function() {
var Home,
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
Home = (function() {
function Home() {
this.onDBInit = __bind(this.onDBInit, this); this.db = openDatabase("Journal", "", "Bookmarks Stats", 5 * 1024 * 1024, this.onDBInit, this.onDBError);
}
Home.prototype.onDBInit = function(db) {
console.log(db.version);
db.changeVersion("", "1.0", this.initDB, this.onDBError);
return console.log(db);
};
Home.prototype.initDB = function(t) {
console.log(t);
return t.executeSql('CREATE TABLE bookmarks (id, title, url)');
};
Home.prototype.onDBError = function(e) {
return console.log(e);
};
return Home;
})();
window.Registerable(Home);
}).call(this);
出于某种原因,changeVersion 始终失败。我试图删除数据库,重新启动chrome等Chrome版本:18。
答案 0 :(得分:0)
在我有限的经验中,changeVersion可以在Chrome上运行。我还阅读了关于它在Safari上无法正常工作的投诉here,但确实如此。
然而,有两个捕获:
抓住1:
通常,changeVersion 出现失败(它会出错并且db.version仍会返回旧值),但是当你重新打开网页时会触发事务回调数据库,版本号是正确的。
抓住2:
看来你必须准确提供五个参数,包括三个回调。如果您不提供这五个参数,例如您只执行前三个参数,那么当前版本将保持不变。因此,如果您按照每个人所指的this tutorial中的说明进行操作,您会感到失望。
Windows上的Chrome和Safari就是这种情况。
参数是: 1:预期版本 2:新版本 3:事务回调(您可以在此处执行SQL作为版本更改的一部分) 4:失败回调(如果版本更改或事务回调失败) 5:成功回调(如果版本更改和事务回调成功)
我没有在iOS设备上测试过它,但它符合此处提供的Safari规范: https://developer.apple.com/library/safari/#documentation/iphone/conceptual/safarijsdatabaseguide/usingthejavascriptdatabase/usingthejavascriptdatabase.html
在 Opera 中,changeVersion等待将db.version设置为其新值,直到您使用executeSql执行了实际的sql事务。所以我使用一个没有进一步后果的SELECT语句。这实际上不必在事务回调中:我在尝试了一大堆changeVersion命令后在浏览器控制台中尝试单独的executeSql语句时发现了它。
答案 1 :(得分:0)
这是Chrome错误:您无法使用值中的空字符串更改数据库的版本。
根据调用creationCallback中的specifications(在你的情况下,函数onDBInit)数据库的版本暴露给一个空字符串:
使用具有空字符串作为其版本的数据库调用回调,而不管给定的数据库版本
两年前检测到此错误并described in detail,但仍未更正
我已经通过以下方式确定了这个问题:我删除了creationCallback的数据库结构的初始化,并使其成为数据库的第一个事务。
var db = openDatabase("Journal", "0.1", "Bookmarks Stats", 5 * 1024 * 1024);
db.transaction(function (t) {
t.executeSql('CREATE TABLE IF NOT EXISTS bookmarks (id, title, url)');
});