2009-10-02 6 views
7

Donc je sais que si j'inclue un iFrame sur une page qui ne se trouve pas sur le même domaine, je ne peux pas accéder au DOM de cette iframe via la politique du navigateur, mais une page dans un iframe peut-elle y accéder?Les pages iframe peuvent-elles indiquer quand elles sont en iframe?

Plus précisément je dois des idées qui dépendent de cette question:

  1. Si la page intégrée peut dire que ce n'est pas la fenêtre parent, on peut faire soit des sites qui sont si un iFrame-mesure que si la page détecte qu'elle est iframe, elle se transforme en une page "Go Away" OU vous pouvez la rendre uniquement-iframe-able (similaire à un script côté serveur pour les pages qui ne sont destinées qu'à être incluses), de sorte que la page quand elle n'est pas iframed obtiendrait une page "Go Away". Si la page iframed possède certaines libertés que la fenêtre parente n'a pas, elle peut demander la feuille de style de la fenêtre parente et la définir comme feuille de style, ce qui rend le site plus compatible avec le document parent. (Bien sûr, je pourrais simplement faire en sorte que ma feuille de style soit plus liée au site iframed, sachant qu'elle le fera, mais je ne vois pas cela comme un problème).

Quelqu'un sait?

Répondre

11

En ce qui concerne # 1, oui, vous pouvez dire si vous êtes en utilisant javascript encadrée simple:

<script type="text/javascript"> 
if (self != top) 
{ 
    // Framed! 
} 
</script> 

En ce qui concerne # 2, je ne suis pas sûr de ce que vous pouvez faire en utilisant le « top » variable, mais je sais que vous pouvez changer son emplacement (donc si votre site est encadré par un autre site, vous pouvez faire en sorte que votre cadre change l'emplacement du cadre supérieur - redirigeant essentiellement l'utilisateur directement vers votre site).

Vous ne savez pas exactement ce que vous pouvez ou ne pouvez pas faire pour le cadre supérieur - quelqu'un d'autre pourrait vous fournir plus d'informations.

+2

Je suggère amerrissage forcé les commentaires HTML dans l'élément de script, il y a aucun point dans Netscape 2 plus. – Quentin

+0

@David - ok, bien, les vieilles habitudes meurent dur :) –

1

Ceci est possible grâce à l'incorporation JavaScript suivant dans la page:

if(top.location.href != self.location){ 
//do redirection or display message 
} 

Vous pouvez avoir ce Javascript dans le cadre du modèle de site et éviter toute page d'être affichée dans IFrame

0

Je l'ai fait auparavant, et il a travaillé:

<script type="text/javascript"> 
if (window.parent != null) 
{ 
    // Framed! 
} 
</script> 
4

Vous pourriez également être intéressé par this Coding Horror article sur la détection des cadres. Vous pouvez détecter si vous avez été encadré, mais il existe également des contre-mesures que la page "parent" peut prendre pour vous empêcher d'agir en conséquence. Exemple de l'article:

détecter si vous avez été encadrée:

if (parent.frames.length > 0) { 
    top.location.replace(document.location); 
} 

Empêcher un cadre de détection et redirigeant:

var prevent_bust = 0 
    window.onbeforeunload = function() { prevent_bust++ } 
    setInterval(function() { 
    if (prevent_bust > 0) { 
     prevent_bust -= 2 
     window.top.location = 'http://server-which-responds-with-204.com' 
    } 
    }, 1) 
+2

Ancien poste mais pensé que je voudrais ajouter une observation.Alors que vous pouvez être empêché de "bousculer" hors de l'iframe, vous pouvez toujours changer le contenu de votre page lorsque iframe est détecté pour afficher un message d'erreur comme "Cette page a été piratée. Vous ne visitez pas cette page sur le véritable site s'il vous plaît visitez xyz.com/... pour lire l'article. " – Endophage