safari的本地数据库
本文按署名·非商业用途·保持一致授权作者:
,发表于2009年09月27日11时27分
首先借此文章庆祝国庆放假8天!祝大家中秋节快乐!
昨天闲着无聊,看safari的设置,发现有个数据库的东西,这个东西以前似乎也看到过,可能是当时没注意,我也不十分确定。
搜索了一下,原来这是HTML5标准里的一个特性。根据webkit.org的描述,webkit在07年10月就加入了这个东西,不过不知道safari是啥时候加入这个功能的。而chrome目前的正式版本,尚未加入此功能。
这个本地数据库功能,允许浏览器开发人员(主要是Javascript开发人员)在用户本机上用SQL语句来存储数据。这个数据库引擎有99.9%的可能是sqlite。
下面是http://webkit.org/demos/sticky-notes/index.html里的一些代码,很熟悉吧。
db = openDatabase("NoteTest", "1.0", "HTML5 Database API example", 200000);
....
....
db.transaction(function(tx) {
tx.executeSql("SELECT COUNT(*) FROM WebkitStickyNotes", [], function(result) {
loadNotes();
}, function(tx, error) {
tx.executeSql("CREATE TABLE WebKitStickyNotes (id REAL UNIQUE, note TEXT, timestamp REAL, left TEXT, top TEXT, zindex REAL)", [], function(result) {
loadNotes();
});
});
});
....
.....
tx.executeSql("SELECT id, note, timestamp, left, top, zindex FROM WebKitStickyNotes", [], function(tx, result) {
for (var i = 0; i < result.rows.length; ++i) {
var row = result.rows.item(i);
.....
....
db.transaction(function (tx)
{
tx.executeSql("UPDATE WebKitStickyNotes SET note = ?, timestamp = ?, left = ?, top = ?, zindex = ? WHERE id = ?", [note.text, note.timestamp, note.left, note.top, note.zIndex, note.id]);
});
和cookie类似,这个存储是基于域名来存储和读取的。不同的域名之间,是不可以互相写入和读取的。
我大致测试了一下Firefox3.5,这个功能并没有被支持(或者是使用了别的函数名来初始化db?我没有仔细的测试和查阅文档)。而上面也提到了,chrome虽然也是webkit-based,但是并没有这个本地数据库的功能。
由于浏览器的支持太少,所以目前只看到有一些针对iPhone设计的网站使用了这个本地数据库功能。
