みかづきブログ その3

3ヶ月つづけてみました。

iPhoneのSafari(mobile Safari) にて localStrageにアクセスできないときに疑うべきこと

プライベートブラウズになっている

Safariには履歴を残さないモード(プライベートブラウズ)という機能が備わっており、プライベートブラウズモードの状態でlocalStrageに書き込みを行おうとするとエラーを吐きます。
有名ドコロだと、少年ジャンプ+にアップされている漫画をプライベートブラウズで読もうとした時、エラーで止まってしまいます。おそらく何ページまで読んだかをlocalStrageに保持しているのでしょう。

http://plus.shonenjump.com/plus.shonenjump.com

※ 2018年9月18日追記
久しぶりにジャンプ+を見たらプライベートブラウズでも観覧可能になっていました。

shonenjumpplus.com




自分がプライベートブラウズをつかっているかどうかはSafariのUIの色を観れば一目瞭然です。

f:id:kimizuka:20160414094326j:plain

黒っぽくなっていたらプライベートブラウズをつかっています。

f:id:kimizuka:20160414094506j:plain

新規タブを開くときに左下のプライベートボタンを押すことによって切り替えることができます。

※ 2018年9月18日追記
いつのまにかSafariのプライベートブラウズでもlocalStorageにアクセスできるようになってました!
いつからアクセス可能になったのかは調査中です。

Cookieをブロックしている

設定 > Safari > Cookieをブロック > 常にブロック を設定するとlocalStrageにもアクセスできなくなります。

f:id:kimizuka:20160414094334j:plain

コンテンツブロックで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);
}

f:id:kimizuka:20160414100403g:plain
http://jsrun.it/kimmy/wzhb


追記

iOS11からLocalStorageに値が書き込めるようになったようです!

kimizuka.hatenablog.com