iOS5で追加されるPrivate BrowsingモードとWebStorageの兼ね合い

Private Browsing下のWeb Storage

今回の内容は,Mac版SafariのVersion 5.0.5(6533.21.1)と,beta版のiOS5(9A5220p)で確認している今の時点の情報なので,信憑性の賞味期限は短めなエントリとなっています.色々とご注意を.

Mobile Safari Gets Private Browsing Mode in iOS 5

iOS5のSafariからPrivate Browsingがサポートされます.Private Browsingにすると,各種の履歴が残らなくなりますが,副次的にsessionStorageやlocalStorageの両Web Storageの利用にも影響がでます.

例外がポポポポーン

たとえば,Private Browsing時にsessionStorage.setItem(key, val)をすると,QUOTA_EXCEEDED_ERR: DOM Exception 22: An attempt was made to add something to storage that exceeded the quota.と例外が投げられます.

try {
    sessionStorage.setItem(key, val);
} catch(e) {
    // maybe private browsing mode
    console.log(e);
}

Private Browsingモードであることを示すプロパティなどがあれば取得したかったのですが,Privateであることを検知できる時点でPrivateじゃないから,そういうのは無いのかも.(あれば知りたい)

正確には...

例えばsessionStorageで試してみるとしまして.

  1. ページを開く
  2. sessionStorageに何らかsetItem
  3. Private Browsingに切り替えてreload
  4. sessionStorageからgetItem

こうすると,4の時点で2でセットした何らかの値を取得することができます.よって,Private BrowsingモードでWeb Storage類の容量がゼロにされて利用できないわけではなく,新規にsetItemすることができないという認識がより正しいと思われます.

検証誤ってたらごめんなさい...

参考