iOSでプライベートブラウズ(ブラウザでの閲覧履歴を残さない機能)がオンのとき、localStorageのsetItemを使うとエラーが出てJavaScriptが止まってしまう現象に遭遇しました。
2019.07.29追記: iOS11からシークレットモードでもlocalStorageが使えるようになっているようです。
サンプルコード
var storageKey = 'keyName'; var storageData = localStorage.getItem(storageKey); alert(storageData); var saveData = 'value'; localStorage.setItem(storageKey, saveData); alert('保存後のアラート');
localStorageが使えない場合のデモページ
サンプルページをiOSでプライベートブラウズがオンの状態で閲覧すると、setItemでJavaScriptが止まってしまうため、その後のalertが表示されません。
解決方法
try catch を使うことで回避できるようです。
JavaScript
var storageKey = 'keyName'; var storageData = localStorage.getItem(storageKey); alert(storageData); var saveData = 'value'; try { localStorage.setItem(storageKey, saveData); } catch(e) { // setItemがうまくいかなかったとき(とりあえず空で問題なし) alert('setItemがうまくいかなかったとき'); } alert('保存後のアラート');
対応後のデモページ
localStorageへの保存自体はできませんが、JavaScriptが止まってしまう問題は回避できました。
【参考サイト】
コメントが承認されるまで時間がかかります。