61

loadイベントを使用して、iframe のコンテンツがいつ読み込まれたかを検出できます。残念ながら、私の目的では、これには 2 つの問題があります。

  • ページのロード中にエラー (404/500 など) が発生した場合、ロード イベントは発生しません。
  • 一部のイメージまたはその他の依存関係の読み込みに失敗した場合、通常どおり load イベントが発生します。

上記のエラーのいずれかが発生したかどうかを確実に判断できる方法はありますか?

私は Mozilla/XULRunner に基づいたセミ Web セミデスクトップ アプリケーションを書いているので、Mozilla でのみ動作するソリューションは大歓迎です。

4

6 に答える 6

14

iframe ページを制御できる場合 (およびページが同じドメイン名にある場合)、戦略は次のようになります。

  • 親ドキュメントで、変数を初期化しますvar iFrameLoaded = false;
  • iframe ドキュメントが読み込まれるときに、親でこの変数を設定してtrue、iframe ドキュメントから親の関数を呼び出すよう(setIFrameLoaded();にします)。
  • iFrameLoadedオブジェクトを使用してフラグを確認しtimerます (タイマーを好みのタイムアウト制限に設定します) - フラグがまだ false の場合は、iframe が定期的に読み込まれていないことがわかります。

これが役立つことを願っています。

于 2008-12-17T19:38:50.243 に答える
8

最近この問題が発生し、親ページ (IFRAME タグを含む) で Javascript ポーリング アクションを設定する必要がありました。この JavaScript 関数は、IFRAME のコンテンツをチェックして、GOOD 応答にのみ存在する必要がある明示的な要素を探します。これはもちろん、「同一オリジン ポリシー」に違反する必要がないことを前提としています。

多くの異なるネットワーク リソースから生成される可能性のあるすべてのエラーをチェックする代わりに.. 良い応答であることがわかっている 1 つの一定の正の要素をチェックするだけでした。

事前に決められた時間および/または予想される要素を検出するための試行の失敗回数の後、JavaScript は IFRAME の SRC 属性を (サーブレットから要求するために) 典型的な HTTP エラー メッセージを表示するのではなく、ユーザー フレンドリーなエラー ページに変更します。 . JavaScript は、SRC 属性を簡単に変更して、まったく異なる要求を行うこともできます。

function checkForContents(){
var contents=document.getElementById('myiframe').contentWindow.document
if(contents){
    alert('found contents of myiframe:' + contents);
    if(contents.documentElement){
        if(contents.documentElement.innerHTML){
            alert("Found contents: " +contents.documentElement.innerHTML);
            if(contents.documentElement.innerHTML.indexOf("FIND_ME") > -1){
                openMediumWindow("woot.html", "mypopup");
            }
        }
    }
}

}

于 2008-12-22T16:29:23.707 に答える
1

エラーページに対して pageshow イベントが発生していると思います。または、これをクロムから実行している場合は、進行状況リスナーのリクエストをチェックして、ステータス コードを取得できる HTTP チャネルであるかどうかを確認します。

ページの依存関係については、onerror イベント リスナのキャプチャを追加することによって、Chrome からのみこれを行うことができると思います。それでも、CSS の背景やその他の画像ではなく、要素のエラーのみが検出されます。

于 2009-10-09T20:02:42.857 に答える
0

iframe に読み込まれているページの最上位 (本文) 要素の ID を取得します。

iframe の Load ハンドラーで、getElementById() が null 以外の値を返すかどうかを確認します。そうであれば、iframe は正常にロードされています。それ以外の場合は失敗しました。

その場合は、frame.src="about:blank" を入れてください。それを行う前に、必ずロードハンドラを削除してください。

于 2013-08-02T18:55:12.250 に答える