1


0

ユーザーがページのそのタブに移動したときにのみ、Webページの一部に必要なJSファイルをロードしています。

var scriptFile = document.createElement( "script"); scriptFile.setAttribute( "type"、 "text / javascript"); scriptFile.setAttribute( "src"、scriptURL);

私はこの動的ロードのためのエラー処理メカニズムを考え出そうとしています、それで私はJSロードがタイムアウトするか、またはJSがURLによって指定された場所で利用できないならエラーメッセージを表示することができます。

これは私が(IEの)エラー処理を実装しようとしている方法です:

scriptFile.onreadystatechange = function(){// IEの場合(this.readyState == 'complete' || this.readyState == 'loaded'){//タブにコンテンツを表示する} else {//エラーメッセージを表示する}}

これが一つの問題を引き起こしています。 すべて問題なく、JSが期待どおりに存在している場合は、最初にエラーメッセージが表示され、次に正しいコンテンツが表示されます。

少しブレインストーミングをしたところ、readyStateが "uninitialized"から "loading"に変わり、次に "loaded"に変わることがわかりました。 その状態が「読み込み中」のときは、エラーメッセージが表示されています。 その後、状態は「ロード済み」に変わり、その時点でコンテンツが表示されます。

エラーが最初に表示されないようにこれを処理する方法はありますか?

4 回答


3


「おっと私は死んだ」というものはないので。状態、あなたはエラーメッセージを表示することはできません。

編集:私のポイントはあなたがそれを行うことはできないということですので、コードを削除しました。 AJAXリクエストを使用すると、レスポンスを確認して404であるかどうかを確認できますが、スクリプトタグを使用してそれを行うことはできません。

edit2:考え直して、AJAX経由でスクリプトを取得して 'を挿入しないでください。

'document.bodyの中身?

AJAXリクエストが攻撃されたかどうかを確認するには、XMLHTTPRequestオブジェクトのstatusプロパティを確認します。 404であれば、404です。

また、あなたはこのことを手でやるべきではありません。 私はいつもPrototypeかjQueryを使うことを勧めます。 私はプロトタイプにだまされてしまったので、私は要求の状態をチェックする方法を説明しようとするべきではありません。 ここで別の質問でAJAXリクエストを処理する方法を尋ねてみませんか? プロは、404だけでなく、あらゆる種類の障害を処理する方法を確実に教えてくれるでしょう。


1


ロードされているかどうかをチェックするための(グローバルな)変数を1つ持つことについて スクリプトは、ロードが完了した後にそれを設定し、次にその変数をチェックするためにタイマーで設定された別の関数(すでにロード関数の前のページにあります)を持ちます。 5秒遅れますか?)

変数が設定されていない場合(事前定義された時間が経過した後)、ユーザーにエラーを表示します。


1


動作するかどうかにかかわらず、常に "ロードされた"状態を通過するので、 "else"をスクラップする必要があると思います。したがって、 "else"ブランチは何も役に立ちません。

代わりに、タイムアウトを設定してください。

var scriptTimer = setTimeout(function(){//エラーメッセージを表示する//(競合状態の場合は、内容が表示されていないことを確認することを理想的には//続ける必要があります)}); scriptFile.onreadystatechange = function(){// IEの場合(this.readyState == 'complete' || this.readyState == 'loaded'){clearTimeout(scriptTimer);} //今すぐコンテンツをタブに表示する}}}


0


編集:私の方法が間違っていた - Kazeが示唆したようにAJAXを使用