38

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

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

4

2 に答える 2

21

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

404 ページはHTTP ステータス コードを処理しています。これは、ブラウザに送信されるサーバーの応答にのみ含まれますが、javascript がアクセスする可能性のある DOMの実際のwindowおよびオブジェクトには含まれません。これは、確かにステータスコードを収集して適切なアクションを実行できる一方で、 jQuery.ajax() リクエストXmlHttRequest を使用して "iframe" をロードするdocumentなど、JavaScript が応答を受信して​​いる場合にのみ実行できることを意味します。

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
    }
});
于 2014-10-29T21:49:24.530 に答える
19

これがあなたの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 request を使用して、リソースが利用可能かどうかを確認できます

       $(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
                }
            }
        });
    });
    
于 2016-03-07T08:01:04.407 に答える