Comment détecter une erreur 404 dans une iframe?

ma page Web utilise iframes pour collecter du contenu à partir d'autres pages. Toutes les pages sont dans le même domaine.

à partir de la page principale, y a-t-il un moyen de confirmer que toutes les iframes ont chargé, et qu'il n'y a pas d'erreur 404?

24
demandé sur Christophe 2013-05-11 20:04:43

2 réponses

l'état ne se trouve que dans l'en-tête de la réponse.

la page 404 gère un code de statut HTTP , qui n'est inclus que dans la réponse du serveur envoyée au navigateur, mais pas dans les objets réels window et document du DOM auxquels javascript peut accéder. Cela signifie que même si vous pouvez certainement récupérer le code d'état et prendre les mesures appropriées, vous ne pouvez le faire que lorsque votre javascript reçoit la réponse, comme avec un jQuery .ajax() demande ou un XmlHttRequest pour charger votre "iframe" .

Espère que la page 404 suit 404 normes.

si ce qui précède n'est pas une option, la seule autre possibilité peut être de vérifier le titre, et/ou les étiquettes H, pour "404". Bien que ce soit certainement moins qu'idéal (j'aimerais voir, " 404, Film pas trouvé, le film."), il est de votre seule autre 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
    }
});
17
répondu Tony Chiboucas 2017-05-23 12:02:34

supposons que ce soit votre html

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

il y a deux scénarios

  1. le src de votre iframe est dans le même domaine d'où provient votre page.

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

    vous pouvez utiliser la requête ajax de jQuery pour vérifier si la ressource est disponible""

       $(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. le src de votre iframe ne pointe pas sur le même domaine d'où votre page était provenir.

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

    maintenant, les navigateurs ne vous permettront pas de faire une demande transversale à partir du code javascript en raison de Politique d'origine croisée . La solution est de faire une demande jsonp .

    $(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
                }
            }
        });
    });
    
14
répondu mirmdasif 2016-03-08 22:15:05