JSの偶発的なロードに失敗した経験を覚える
1584 ワード
問題の説明
この間、あるページがクラッシュするという同僚の反応がたまにありました.確率は極めて低く、不規則です!自分でやってみましたが、やっぱり!何の問題もない!問題が再現されなければ、問題にならない.
ある日、テスト中にページがクラッシュすることもありました.
ページはvueで実現され、クラッシュ後、vueテンプレートコードがすべて露出しました!不思議なことに、リフレッシュするとページが正常に戻ります.
頭が痛いですね.
問題の位置付け
最初は、PCでモバイル端末のページをデバッグすることはできませんでした(本人はモバイル端末を開発した経験はありません)、後で関連資料を調べて、USB+Chromeを使ってPCでモバイル端末(Android)のページをデバッグすることができます.これで問題は簡単になります.
まず、このページを開き、図のように具体的な異常出力を見てみましょう.
デバッグすると、chromeのnetworkセクション、私が要求したaxios+vueファイルが、予想内の内容ではなく、他のコードの山であることがわかりました.
抽出してフォーマットした後:
このコードによると、なぜ図3の異常があるのか分かりました.
真相を究明する
この幽霊が何を注入したいのかを理解するために、
の は のようになります.
このとき、ページは っていません.デバッグでは、 されたスクリプトがページ に い で す2つの
ソリューション
が しているソリューションは、
その の
「 される」ことによる であることが かったが, はまだ されていない.ネットで の「 」を べただけだ.しかし、このごろつきがどうやってやったのか からない. に、 る が えを けてくれることを って、 しています.
この間、あるページがクラッシュするという同僚の反応がたまにありました.確率は極めて低く、不規則です!自分でやってみましたが、やっぱり!何の問題もない!問題が再現されなければ、問題にならない.
ある日、テスト中にページがクラッシュすることもありました.
ページはvueで実現され、クラッシュ後、vueテンプレートコードがすべて露出しました!不思議なことに、リフレッシュするとページが正常に戻ります.
頭が痛いですね.
問題の位置付け
最初は、PCでモバイル端末のページをデバッグすることはできませんでした(本人はモバイル端末を開発した経験はありません)、後で関連資料を調べて、USB+Chromeを使ってPCでモバイル端末(Android)のページをデバッグすることができます.これで問題は簡単になります.
まず、このページを開き、図のように具体的な異常出力を見てみましょう.
デバッグすると、chromeのnetworkセクション、私が要求したaxios+vueファイルが、予想内の内容ではなく、他のコードの山であることがわかりました.
抽出してフォーマットした後:
このコードによると、なぜ図3の異常があるのか分かりました.
Uncaught TypeError: Cannot read property 'appendChild' of undefined
まず、私のaxios+vueファイルのscript
はhead
ラベル内に置かれています.ブラウザがこのラベルをロードしたとき、body
要素はまだ構築されていませんでした.しかし、気まずい点は、この2つのファイルが注入された後、フィードバックされたjsスクリプトの内容に、document.getElementsByTagName('body')[0].appendChild(l)
というすぐに実行されるコードがあることです.body
要素がない以上、append
が成功するはずがありません.真相を究明する
この幽霊が何を注入したいのかを理解するために、
と
をbody
に いて、この が い りになるようにすることにしました.の は のようになります.
このとき、ページは っていません.デバッグでは、 されたスクリプトがページ に い で す2つの
script
ラベルを し、iframe
( の )を していることがわかりました.これで が らかになった!ソリューション
が しているソリューションは、
http
リンクをhttps
に することです.その の
「 される」ことによる であることが かったが, はまだ されていない.ネットで の「 」を べただけだ.しかし、このごろつきがどうやってやったのか からない. に、 る が えを けてくれることを って、 しています.