皆様この超寒い季節、いかがお過ごしでしょうか。
私は寒いときは度数が高めのお酒をコンビニで買って飲んで、なんとか寒さをごまかしております。
さて本日は、この超寒い季節に似つかわしくない、
私がコーディング中に出会った背筋が冷たくなる現象についてのお話。
ある日私は、前任者から引き継いだコーディング案件を進めておりました。
そして、テスト環境にアップして、iPhoneでブラウザチェックをしたところ、
ブラウザにこんな表示が出てページが見れなくなりました…
(サイトURL)で問題が発生しました
!!!!!?????
こんな表示見たことない…
というわけで、本記事ではこのような現象を解決できるかもしれない対処法をご紹介。
同じ現象が起こった方は、ぜひご参考にしてください!!
解決法
制作したページをiOSで開くと「問題が繰り返し起きました」と表示されるときは、
ページの読み込み時の動作を軽くしてみましょう!!!
私の場合は、
読み込み時に表示されるiframeを減らす
という方法で解決しました。
解決の経緯
まずはGoogle検索、しかし解決せず
問題が起こったときに、やはり役立つのはGoogle検索。
Apple公式のヘルプを見てみると、
その Web サイトの開発元にお問い合わせください。
そこで、さらに他を検索してみると、まず出てくる対処法は
- キャッシュを削除する
- 履歴を削除する
- JavaScriptをオフにしてみる
- iOSを更新する
- iPhoneを再起動する
といったもの。
しかし私の案件の場合、どれを行っても解決しませんでした…
別に特殊仕様のサイトとかいうわけでもないのに…
ここである一つの事実に気づく
実は本案件、phpを使用してヘッダとフッタを読み込む案件でした。
そして、読み込む前と読み込む後では動作が異なることが判明。
- 読み込む前:初期状態ではエラーは発生せず、画面を横に傾けるとエラーが発生する
- 読み込む後:初期状態の時点でエラーが発生している
ん?ということは、これはページの容量の問題か・・・?
しかしこのページはそんなに重くないはず…
そう思ってもう一度HTMLファイルを見回してみると…
HTMLファイル中に、iframeタグがいっぱい!!!
そのページのモーダルウインドウ内に、iframeタグがいっぱい書かれておりました!!!
しかもそのモーダルウインドウ、内容が複数種類あるのですが
全種類がHTMLファイル中に記入されており、JavaScriptの役割といえば下記2点のみ…
- モーダルウインドウの表示/非表示
- モーダルウインドウの内容のうち、表示するものにクラスを付与して内容を切り替え
どうやらページ読み込みの時点で全てのiframeを読み込もうとしたため、クラッシュしてしまったようです。
ではどうすればクラッシュを防げるかというと…
ページ読み込み時に必要のないiframeタグは、必要なときにJavaScriptで動的に読み込む
私の場合は上記の方法で解決しました。
具体的には下記のような方法です。
- JavaScriptで、モーダルウインドウのマークアップ内容を全て変数に格納
- 内容を切り替えるときは、その変数中から該当するマークアップを取得して表示
これで無事、クラッシュせずにページを読み込むことができました…
助かった…
最後に
どうやらiframeを多用すると読み込み時にページが途端に重くなってしまうようです。
どうしても必要な場合は、今回の方法のように、読み込み時に重くならない工夫をしなければならないようですね。
「このような事象が起こる=必ずしも重さが原因」というわけではありませんが、まずはここを疑ってみてください。