====== クライアントサイドストレージ ======
[[http://www.w3.org/TR/webstorage/|クライアントサイドストレージ]]は、ブラウザにデータを保存する仕組み。JavaScriptでデータを保存、取得できる。
[[HTML5]]の仕様に追加される予定。
===== キーバリューストア(DOMストレージ) =====
キーと値のペアでデータを保存する。セッションストレージとローカルストレージの2種類のストレージがある。
* セッションストレージ:ウィンドウ(タブ)を閉じるまでデータが保存される。ウィンドウ毎にデータが独立している。
* ローカルストレージ:データはウィンドウを閉じても保存されている。複数ウィンドウでデータが共有される。
値に保存できるのは文字列のみである。
サンプルコード
// セッションストレージ
var ss = window.sessionStorage;
ss.setItem("hoge", "ほげ");
window.alert(ss.getItem("hoge"));
// ローカルストレージ
var ls = window.localStorage || window.globalStorage[location.hostname];
ls.setItem("hoge", "ほげ");
window.alert(ls.getItem("hoge"));
現在のFirefox 3ではglobalStorageという名前でローカルストレージが実装されていたが、HTML5の仕様では localStorage というインターフェースである。Firefox 3.5からHTML5仕様に沿ったものに変更されたようだ。
* [[http://paulownia.jp/sample/html5/storage/session.html|セッションストレージのサンプル]]
* [[http://paulownia.jp/sample/html5/storage/local.html|ローカルストレージのサンプル]]
最新のブラウザが続々と対応中、2009/03/24時点でFirefox3、Safari4、IE8が対応している。
==== 使い方 ====
以下の5つのメソッドが定義されています。
DOMString key(int) 指定した番号のインデックスにあるキーの値を取得.
DOMString getItem(DOMString) 指定キーの値を取得
void setItem(DOMString, DOMString) キーに値をアサインする
void removeItem(DOMString) 指定キーの値を取り除く
void clear() ストレージをクリアする
lengthプロパティが定義されています。
int length ストレージに格納されたアイテムの数を取得
ストレージへの値の取得、セットはgetItem、setItemメソッドを使用する。また、通常のJavaScriptオブジェクトのようにキーをプロパティ名としてアクセスしたり、連想配列のようにアクセスすることもできる。
sessionStorage.setItem("hoge", "fuga")
sessionStorage["hoge"] = "fuga";
sessionStorage.hoge = "fuga";
fuga = sessionStorage.getItem("hoge");
fuga = sessionStorage["hoge"];
fuga = sessionStorage.hoge;
ストレージのすべての値を取得する場合は、keyメソッドを使う。
for (int i = 0; i < storage.length; i++) {
var key = storage.key(i);
var value = storage.getItem(key);
}
===== SQLインターフェース =====
ローカルのデータベースにSQLでデータを保存・取得する。
サンプルコード(for Safari 3.2)
function getDatabase() {
return window.openDatabase("test", "1.0", "test database", 10240);
}
function init() {
var db = getDatabase();
var table = getListTable();
db.transaction( function(tx){
tx.executeSql("CREATE TABLE IF NOT EXISTS items (id INTEGER PRIMARY KEY, name STRING, value STRING)" , []);
tx.executeSql("SELECT id, name, value FROM items", [], function(tx, rs){
for (var i = 0; i < rs.rows.length; i++) {
var row = rs.rows.item(i);
table.add(row.id, row.name, row.value);
}
});
});
}
function save(name, value) {
var table = getListTable();
var db = getDatabase();
db.transaction(function(tx){
tx.executeSql("INSERT INTO items (name, value) VALUES (?,?)", [name, value]);
tx.executeSql("SELECT last_insert_rowid() AS lastId FROM items", [], function(tx, rs) {
table.add(rs.rows.item(0).lastId, name, value);
});
});
}
現在SQLインターフェースが実装されているブラウザはSafariのみである。Safariでは開発メニューで現在のページで使用しているローカルDBのテーブルやデータを見る事ができる。
Safariではローカルデータベースの実装にSQlite3が使用されている。他のブラウザは不明だがFirefoxもおそらくSQLiteを使うと思われる。IEが実装する事になった場合はSQL Serverが使われるのではないだろうか…。
* [[http://paulownia.jp/sample/html5/storage/db.html|SQLインターフェースのサンプル (Safari 3.2以降のみ)]]