iPhoneのSafariのプライベートモードでlocalStorageが動かない
最近、スマホ向けサイトでお気に入りに登録してねとか、初回だけアラート出すような奴、結構流行ってるじゃないですか。
jsでサクッと書く場合、localStorageにタイムスタンプをsetしたり、あるいは見たよ的な値をsetすると思うんです。
そんでアラート消すとかするじゃないですか。
node.addEventListener("click",function(e){ localStorage.setItem('mitayo',1); node.parentNode.removeChild(node); });
それは良いんですが、その後、忘れた頃に他の修正をはじめちゃって、それで、ブラウザキャッシュうざいからプライベートモードでゴリゴリ確認しようとか思い立つんです。
そしたらアラートうざいんですよね。だから、「消そう」と。
そしたら消えないんですよ。
知らない間にバグ増えてるとか焦りますよね。iOSのバージョンアップとかのせいにして必死でデバッグするんです。 でも、プライベートじゃないSafariだと既にアラート消してたりするんで、プライベートモードで開いてアラート出すんです。
でも、消えないんですよ。
一生懸命、イベントタイプとかz-indexとか色々いじるんですけど、消えないんですよ。
PCのChromeのシークレットモードでシミュレーションしたら、消えるんです。おかしい、なんでだよって思うんです。
一時間くらい悶々としていたら、iPhoneのSafariのプライベートモードでlocalStorage触ると例外発生するらしいんですよ。
なので、
node.addEventListener("click",function(e){ node.parentNode.removeChild(node); localStorage.setItem('mitayo',1); });
と順番入れ替えるか、きちんとcatchしてあげると良いのです。
node.addEventListener("click",function(e){ try{ node.parentNode.removeChild(node); } catch(e){} localStorage.setItem('mitayo',1); });
何もない穴に地雷を埋めて、再び掘り返すような人が二度と現れませんように…。