webentwicklung-frage-antwort-db.com.de

Wie erkenne ich einen Fehler 404 in einem Iframe?

Meine Webseite verwendet Iframes, um Inhalte von anderen Seiten zu sammeln. Alle Seiten befinden sich in derselben Domain.

Gibt es auf der Hauptseite eine Möglichkeit, zu bestätigen, dass alle iframes geladen wurden und kein 404-Fehler vorliegt?

27
Christophe

Der Status befindet sich nur im Antwortheader.

Die 404-Seite verarbeitet einen HTTP-Statuscode , der nur in der Antwort des Servers an den Browser enthalten ist, nicht jedoch in den tatsächlichen window- und document -Objekten von das DOM, auf das Javascript zugreifen kann. Dies bedeutet, dass Sie zwar den Statuscode erfassen und entsprechende Maßnahmen ergreifen können, dies jedoch nur tun können, wenn Ihr Javascript die Antwort erhält, z. B. mit einer jQuery.ajax () -Anforderung oder einer - XmlHttRequest zum Laden Ihres "iframe" .

Ich hoffe, die 404-Seite entspricht den 404-Standards.

Wenn dies keine Option ist, besteht die einzige andere Möglichkeit darin, den Titel und/oder die H-Tags auf "404" zu überprüfen. Dies ist sicherlich weniger als ideal (ich würde gerne "404, Film nicht gefunden, der Film" sehen), aber es ist Ihre einzige andere Option.

$('#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

Angenommen, dies ist Ihr HTML

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

Es gibt zwei Szenarien

  1. Der Quellcode Ihres Iframes befindet sich in derselben Domäne, aus der Ihre Seite stammt.

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

    Sie können die jQuery-Ajax-Anforderung verwenden, um zu überprüfen, ob die Ressource verfügbar ist

       $(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. Der Quellcode Ihres Iframes verweist nicht auf dieselbe Domain, aus der Ihre Seite stammt.

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

    Aufgrund von Cross-Origin-Richtlinie können Sie in Browsern keine Cross-Site-Anfrage von Javascript-Code stellen. Der Weg dahin ist, eine jsonp-Anfrage zu machen.

    $(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