Vueで作った画面がスマホで「Load failed」になるときの原因と実際の30秒でできるデバッグ手順

Vue.js

Vueで作った画面がスマホで「Load failed」になるときの原因と実際の30秒でできるデバッグ手順

スマホSafariだけで「Load failed」になる現象

VueでSPAを作ってFirebase Hostingに置いたら、スマホでだけ「Load failed」が出る。「次へ」ボタンを押した後、ブラウザの「戻る」で戻って、もう一度「次へ」を押すと再現しやすい。

読者
読者

どうやってこの現象デバッグすればいいの?

原因の大半はSafari特有の仕様

PCやAndroid Chromeでは起きないけど、Safariだけで起きるのは、こういう仕様があるから:

ごりら
ごりら

・メモリ制限がキツい・Service Workerのキャッシュがシビア・「戻る」操作でページが再読み込まれないことがある・DOM内容やイベントが再バインドされない

Erudaでスマホのコンソールを確認する手順

スマホでコンソールを確認するのに便利なのが「Eruda」ってやつ。公式CDNを読み込めば、DevToolsみたいなヤツをスマホ内に表示できる。

読者
読者

そのCDNってどこに追加すればいい?

Vue CLIなら public/index.html に追加

例:

<script src="https://cdn.jsdelivr.net/npm/eruda" crossorigin="anonymous"></script>
<script>eruda.init();</script>
ごりら
ごりら

これで、スマホで開くと画面下にグレーのボタンが出るよ

スマホで実際にデバッグする手順

1. さっきのスクリプトを public/index.html に追加

2. Firebase Hosting にデプロイ

読者
読者

普通の本番にそのまま入れても大丈夫?

3. スマホでURLを開くと、画面下にボタンが現れる

4. Console タブでログやエラーを確認

ごりら
ごりら

本番に使わない場合は if(process.env.NODE_ENV === ‘development’) で分岐しよう

まとめ

「Load failed」や「Script error.」は、スマホのメモリ制限やバーフォーワードキャッシュの影響が大きい。VueでSPAを作る場合は、router-viewに key を付けるといった基本に加えて、Erudaでモバイル内で確認できるようにするのが効果的。

ごりら
ごりら

スマホのエラーはPCのデバッグでは見れないことが多いから、Erudaは一番手っ取り早い手段だね

コメント

タイトルとURLをコピーしました