43 votes

Existe-t-il un moyen côté client de détecter les options X-Frame ?

Existe-t-il un bon moyen de détecter lorsqu'une page ne s'affichera pas dans un cadre à cause de l'en-tête X-Frame-Options ? Je sais que je peux demander la page côté serveur et rechercher l'en-tête, mais j'étais curieux de savoir si le navigateur dispose d'un mécanisme pour détecter cette erreur.

13voto

Iftach Points 41

OK, celui-ci est ancien mais toujours d'actualité.

Fait: Lorsqu'une iframe charge une URL qui est bloquée par un X-Frame-Options, le temps de chargement est très court.

Pirater: Donc, si le chargement se produit immédiatement, je sais qu'il s'agit probablement d' un problème X-Frame-Options.

Clause de non-responsabilité: C'est probablement l'un des codes les plus 'hacki' que j'ai écrit, alors ne vous attendez pas à grand-chose :

 var timepast=false; 
var iframe = document.createElement("iframe");

iframe.style.cssText = "position:fixed; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%; border:none; margin:0; padding:0; overflow:hidden; z-index:999999;";
iframe.src = "http://pix.do"; // This will work
//iframe.src = "http://google.com"; // This won't work
iframe.id = "theFrame";

// If more then 500ms past that means a page is loading inside the iFrame
setTimeout(function() {
    timepast = true;
},500);

if (iframe.attachEvent){
    iframe.attachEvent("onload", function(){
    if(timepast) {
            console.log("It's PROBABLY OK");
        }
        else {
            console.log("It's PROBABLY NOT OK");
        }
    });
} 
else {
    iframe.onload = function(){
        if(timepast) {
            console.log("It's PROBABLY OK");
        }
        else {
            console.log("It's PROBABLY NOT OK");
        }
    };
}
document.body.appendChild(iframe);

0voto

Newtang Points 1659

La seule chose à laquelle je peux penser est de proxy une requête AJAX pour l'URL, puis de regarder les en-têtes, et s'il n'a pas X-Frame-Options, alors l'afficher dans l'iframe. Loin d'être idéal, mais mieux que rien.

0voto

apenwarr Points 4956

Au moins dans Chrome, vous pouvez remarquer l'échec du chargement car l'événement iframe.onload ne se déclenche pas. Vous pouvez l'utiliser comme indicateur que la page pourrait ne pas autoriser l'iframe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X