プライベートブラウズになっている
Safariには履歴を残さないモード(プライベートブラウズ)という機能が備わっており、プライベートブラウズモードの状態でlocalStrageに書き込みを行おうとするとエラーを吐きます。
有名ドコロだと、少年ジャンプ+にアップされている漫画をプライベートブラウズで読もうとした時、エラーで止まってしまいます。おそらく何ページまで読んだかをlocalStrageに保持しているのでしょう。
http://plus.shonenjump.com/plus.shonenjump.com
※ 2018年9月18日追記
久しぶりにジャンプ+を見たらプライベートブラウズでも観覧可能になっていました。
※ 2018年9月25日追記
iOS11から対応した模様です。
kimizuka.hatenablog.com
自分がプライベートブラウズをつかっているかどうかはSafariのUIの色を観れば一目瞭然です。
黒っぽくなっていたらプライベートブラウズをつかっています。
新規タブを開くときに左下のプライベートボタンを押すことによって切り替えることができます。
※ 2018年9月18日追記
いつのまにかSafariのプライベートブラウズでもlocalStorageにアクセスできるようになってました!
いつからアクセス可能になったのかは調査中です。
Cookieをブロックしている
設定 > Safari > Cookieをブロック > 常にブロック を設定するとlocalStrageにもアクセスできなくなります。
コンテンツブロックでCookieをブロックした場合もアクセスできなくなるかと思い、1BlockerでCookieをブロックしてみましたが、その場合はlocalStrageにアクセスはできました。
https://itunes.apple.com/jp/app/1blocker-block-ads-tracking/id1025729002?mt=8&uo=4&at=10l16903
対策
localStrageにアクセスしたいときは実装時にtrycatchをつかうなどしてエラーが起こっても止まらないようにしておいたほうが良いと思います。
try { localStorage.setItem("msg", "LOCAL!"); // 書き込み } catch(e) { // エラー時の処理 }
DEMO
localStrage、sessionStorageにアクセスするだけのページをつくりまいた。
アクセスできるかどうかのテストする際にどうぞ。
try { sessionStorage.setItem("msg", "SESSION!"); alert(sessionStorage.msg); } catch(e) { alert(e); } try { localStorage.setItem("msg", "LOCAL!"); alert(localStorage.msg); } catch(e) { alert(e); }