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 なら、ノーチェックで書き込みます。最大値を超えてデータを書き込もうとすると、データをロストする可能性あります。

デモ

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, IE7Flash が利用不能な場合に、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 を参考にしてください。