私はいくつかのWebサイトにJavaScriptウィジェットを提供しています。それらは非同期に読み込まれます。私のウィジェットは、私のコントロールの外に、別のパーティーが提供するスクリプトをロードする必要があります。サードパーティのスクリプトが読み込まれなくなるとすぐにJavaScriptを実行してください
スクリプトが正常に読み込まれたかどうかを確認する方法はいくつかあります。ただし、スクリプトの読み込みに失敗した場合は、別のコードを実行する必要があります。
動作しない明白なツールが含まれます:私は、jQueryのようのJavaScriptライブラリを使用して喜んでいないよ
。ウィジェットを使用するサイトへの影響を最小限に抑えるには、非常に小さなスクリプトが必要です。
私はできるだけ早く障害を検出したいので、タイマーを使用してポーリングすることは望ましくありません。私は、古いブラウザの最後の手段としてタイマーを使用しても構いません。
私は
<script>
タグのonerror
イベントが一部の主要なブラウザでは信頼できないと判断しました。 (インストールされたアドオンに依存しているように見えました)document.write
を含むものはどれも間違いありません。 (その方法は本質的に悪であることに加えdocument.write
ページに悪いことを行うことができますので、私のコードは、非同期でロードされます。)
<script>
をロード関与以前のソリューションを持っていました。そのiframeでは、
<script onload=...>
イベントが既に発生しているかどうかをチェックするイベントハンドラを
<body onload=...>
に設定しました。
<script>
は最初のドキュメントの一部であり、後で非同期で注入されなかったため、ネットワークレイヤが
<script>
タグで行われた後にのみ起動されます。
onload
ただし、親文書に読み込むスクリプトが必要です。それ以上iframeに入れることはできません。ネットワーク層がスクリプトを取得しようとするのをやめた直後に、コードをトリガーする別の方法が必要です。
私は "Deep dive into the murky waters of script loading"を読んで、どのブラウザでも何ができるか保証するための努力をしています。
私はそこに文書化技術を理解していれば:
- 私は別の
.js
のファイルに私の障害処理コードを配置する必要があります。 - 次に、特定のブラウザでは、サードパーティスクリプトが実行されたか、または失敗した後にのみコードが実行されるようにすることができます。これは、どちらかのサポートするブラウザが必要です:DOMを経由してfalseに
<script async>
属性、 - またはIE 6+で
<script onreadystatechange=...>
を使用して設定- 。
async support tableを見ているにもかかわらず、私は、これが実現可能にするための十分なブラウザでスクリプトの順序に頼ることができるかどうかわかりません。
私が制御しないスクリプトの読み込み中にエラーを確実に処理する方法はありますか?
スクリプト内に何かが存在するかどうかを確認しますか?スクリプトに特定のオブジェクトが含まれているように、 –
@CrayonViolentを探してみると、スクリプトがロードされたと判断するのは簡単です。しかし、私はいつチェックするかを知る必要があります。私があまりにも早くチェックすると、スクリプトはまだダウンロードされていないでしょう。私は "まだロードされていない"と "私たちがあきらめたのでロードしない"の違いを伝える方法を知る必要があります。スクリプトが処理された後に私の小切手が実行されることを確かめることができれば、私はすべて設定されています。 –
うまくいけば、スクリプト内で一意のものを確認することが最も信頼できる方法になります。しかし、実際には、setTimeoutを100msごとにx時間使用してからそれをやめないと、それをやり遂げる方法はないと思います。これは私がこれのような状況でやっていることであり、これまで私はよりよい方法を見つけていませんでした。/ –