割と前から既知だったようだけど、今日ちょうど直面した。
詳細については及川さんのブログが詳しい。
HTML5のストレージ技術とプライベートブラウジング - Nothing ventured, nothing gained.
Safariがプライベートブラウジングモードの時にlocalStorageに書き込もうとしたらエラーが出るの、window.localStorageがundefinedとかを返してくれれば良いけど、そうではないのがなかなかって感じする
— Pasta-K/ShutoMorii (@pastak) 2013, 10月 19
ブラウザがプライベートブラウジングモードかどうかは当然知られたくない情報だろうから、UAとかから分かることもなくて、localStorage
に書き込もうとしたら、エラーになるから分かる。
make a record of…: [iPhone] プライベートブラウズモードだとストレージが使えないとかでも書かれてるように、localStorage.setItem
とかする部分をtry{~~}catch{~~}
で囲んでやるしかない。
認証ボタンを押したことをクライアント側で知っておきたいというために利用していたので、プライベートブラウジングモードだとlocalStorage
に書き込めなくて認証画面が無限ループする状態だった。
結局、localStorageの書き込みに失敗したらtry-catchで掴んで、その時だけajaxで認証済みであることをサーバサイドのセッションに委託することにした
— Pasta-K/ShutoMorii (@pastak) 2013, 10月 19
スマートフォン向け実装だから、極力サーバとの通信回数を減らすべくlocalStorage
を使う選択をしたのに思わぬところでサーバと通信させないといけなくなったという感じ。