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が止まってしまう問題は回避できました。
【参考サイト】
コメントが承認されるまで時間がかかります。