2

私は JavaScript ウィジェットを作成しています。これは、他の Web サイトで使用することを目的としており、自分の Web サイトから追加のスクリプト ファイルをロードします (クロスドメインの制限により、基本的に XHR がないことを意味します)。ここで、障害を適切に処理したいと考えています。1 つのスクリプトの読み込みに失敗した場合は、別のサーバーからスクリプトを読み込みたいと考えています。

最初のサーバーがエラーを返すサーバー障害を処理することができましたが、タイムアウトも処理したいと考えています。最初のサーバーが応答するのに時間がかかりすぎる場合は、負荷を中止して別のサーバーに切り替えたいと考えています。

私が抱えている問題は、タイムアウトを設定して代替サーバーに切り替えるメソッドをトリガーできることですが、元の要求でブラウザー自体がタイムアウトするまで、代替サーバーからのスクリプトが正常に読み込まれません。私のニーズを待ち望んでいます。

最初の <script> タグのロード中に、ロードを中止し、代替サーバーを指す 2 番目の <script> タグを追加できるようにしたいと考えています。

元のスクリプトの src 属性を null に設定し、removeNode() を使用して HEAD 要素からタグを削除しようとしましたが、効果はありませんでした。

これはすべて Firefox で試しました。IE はまだ試していませんが、解決策は両方で動作する必要があります。提案があればぜひ聞きたいです。

4

3 に答える 3

0

window.setTimeout() 経由で中止できる XMLHttpRequest を使用するようにウィジェットを構成したいと思うかもしれません。

于 2009-02-25T20:53:51.703 に答える
0

ロードされているスクリプトを変更できる場合は、そこにコールバックを追加できます。ページの上部でタイマーを設定し、スクリプト ファイルの下部でタイマーをクリアするだけです。この方法では、スクリプトが正しく読み込まれない場合、タイマーが切れたときにバックアップ リクエストが実行されます。

ページの上部で、インライン スクリプト ブロックで次を実行します。

doneLoading = function() {
  clearTimeout(timeout);
}

timeout = setTimeout(function() {
             ... change the .src on the old inline script element here ...
                     }, 15000);

外部 JavaScript ファイルの最後で、 を呼び出すだけdoneLoading()です。最初のリクエストに 15 秒以上かかる場合は、バックアップ サーバーへの新しいリクエストが実行されます。最初のリクエストを中止することはできないと思いますが、バックアップ リクエストは期待どおりに実行されます。

于 2009-03-04T07:34:16.323 に答える