LocalStorage や SessionStorageが使えるかどうか確認する時の条件について。
未サポート機種であればwindowにlocalStorageやsessionStorageというプロパティがないので
if(window.localStorage)
みたいな条件だけでもチェック出来る。
しかしWebViewでも表示する場合、ネイティブ側で使用許可をしていないと
「サポートはしているんだけど使えない」という状況になってsetItem等を使った場合にQUOTA_EXCEEDED_ERRとなる。
WebViewで許可されていない場合はnullを返すので、その条件も含めつつ
setItemで適当な文字列を書きこんでgetItemした時に同じ文字列だったら
ストレージが使えると判断するのが確実みたいでした。
var hasLocalStorage = (function(){ if(('localStorage' in window) && window['localStorage'] !== null){ try { localStorage.setItem('test', 'test'); var c = localStorage.getItem('test'); localStorage.removeItem('test'); return (c === 'test'); } catch(e) { return false; } }else{ return false; } })();
書きこみの前に都度チェックを入れる場合は、setItemの前にremoveItemを挟んでおくと
連続書きこみのエラーが回避出来ます