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を挟んでおくと
連続書きこみのエラーが回避出来ます