uu.local take2
安全性重視で、色々と書き直しました。
- 最大容量を返す、uu.local.size() を追加
- ペア数を返す、uu.local.pairs() を追加
- uu.local.set(key, value, safe = 0) に 第三引数(safe)を追加
- 書き込み成功で true, 失敗で false を返します。
- safe = 1 なら、overflow チェックと書き込んだ値の verify を行います。速度が犠牲になりますが安全です。
- safe = 0 なら、ノーチェックで書き込みます。最大値を超えてデータを書き込もうとすると、データをロストする可能性あります。
- 書き込み成功で true, 失敗で false を返します。
デモ
http://pigs.sourceforge.jp/blog/20100106/uu.storage.htm
Firefox2+, Safari3.1+, IE6+, Google Chrome3+, Opera9.2+ で動作確認してます。
ストレージバックエンド
以下のオーダーで バックエンドが利用可能か試行します。
- Web Storage (window.localStorage) (Firefox3.5+, IE8+, Safari4+, Opera10.50+)
- Flash Storage (SharedObject) (Flash8 以上をインストールしている環境)
- IE Storage (userData behavior) (IE6+)
- Cookie Storage (document.cookie) (cookieが利用可能な環境)
IE6, IE7 で Flash が利用不能な場合に、IE Storage を選択するように変更しました。
FlashStorage が選択され Flash のロードに失敗した場合は、フェイルオーバーで次点以降のストレージ(IE Storage → Cookie Storage → None)を選択するようにしました。
I/F
- uu.local() で key/value ペアの全取得と 個別取得/登録 を
- uu.local.nth() で n 番目の key を取得(イテレート用)(0 オリジン)
- uu.local.get(key) で key に一致する value を取得, 無ければ null または 空文字列
- uu.local.set(key, value, safe = 0) で pair を登録
- uu.local.size() で { use, max, free } を取得
- use: 利用済(bytes) 不明なら -1
- max: 最大値(bytes) 不明なら -1
- free: 残容量(bytes) 不明なら 0
- uu.local.pairs() で pair数の取得
- uu.local.clear() で 全pairの削除
- uu.local.ready() が true ならいずれかのストレージを利用可能
- uu.local.remove(key) で pair の削除
- uu.local.backend() で現在オープンしているストレージのバックエンドを取得
- 0: オープンしていない(利用不能)
- 1: wait, Storage のオープン待ち
- 2: Web Storage(localStorage)
- 3: globalStorage
- 4: Flash Storage
- 5: IE Storage
- 6: Cookie Storage
ここに書かれていないことは、過去のエントリ http://d.hatena.ne.jp/uupaa/20100104/1262597427 を参考にしてください。