web-dev-qa-db-ja.com

iframeでエラー404を検出する方法は?

私のWebページはiframeを使用して他のページからコンテンツを収集します。すべてのページは同じドメインにあります。

メインページから、すべてのiframeが読み込まれ、404エラーがないことを確認する方法はありますか?

27
Christophe

ステータスは応答ヘッダーにのみ存在します。

404ページは HTTPステータスコード を処理します。これは、ブラウザに送信されるサーバーの応答にのみ含まれ、実際のwindowおよびdocumentオブジェクトには含まれませんjavascriptがアクセスできるDOM。これは、ステータスコードを収集して適切なアクションを実行できることは確かですが、 jQuery.ajax()request または- 「iframe」をロードするXmlHttRequest

404ページが404標準に従うことを願っています。

上記が選択肢でない場合、他の唯一の可能性は、「404」のタイトルやHタグをチェックすることです。これは間違いなく理想的とは言えませんが(「404、ムービーが見つかりません、ムービー。」)、それが唯一の選択肢です。

$('#iframe').load(function (e) {
    var iframe = $("#iframe")[0];

    if ( iframe.innerHTML() ) {
        // get and check the Title (and H tags if you want)
        var ifTitle = iframe.contentDocument.title;
        if ( ifTitle.indexOf("404")>=0 ) {
            // we have a winner! probably a 404 page!
        }
    } else {
        // didn't load
    }
});
19
Tony Chiboucas

これがあなたのhtmlだとします

<html>
    <head></head>
    <body>
      <iframe id="iframe"></iframe>
    </body>
 </html>

2つのシナリオがあります

  1. Iframeのsrcは、ページの作成元と同じドメインにあります。

    Ex : page url www.example.com and iframe's src www.example.com/iframe
    

    JQuery ajaxリクエストを使用して、リソースが利用可能かどうかを確認できます。

       $(function() {
            $.ajax({
                type : "HEAD",
                async : true,
                url : "www.example.com/iframe"
            })
            .success(function() {
                $("#iframe").attr("src", "www.example.com/iframe");
            })
            .error(function(){
               // Handle error perhaps a failover url
            })
        });
    
  2. Iframeのsrcは、ページの作成元と同じドメインを指していません。

    Ex : Page url www.example.com and iframe's src www.otherdomain.com/iframe
    

    ブラウザは、 クロスオリジンポリシー が原因で、javascriptコードからクロスサイトリクエストを行うことができなくなりました。回避策は jsonp request を作成することです。

    $(function() {
        $.ajax({
            url: "www.otherdomain.com/iframe",
            dataType: "jsonp",
            timeout: 5000,
    
            success: function () {
                $("#iframe").attr("src", "www.otherdomain.com/iframe");
            },
            error: function (parsedjson) {
                if(parsedjson.status == "200") {
                    $("#iframe").attr("src", "www.otherdomain.com/iframe");
                } else {
                    // Handle error
                }
            }
        });
    });
    
15
mirmdasif