RoBorg a raison, mais je voulais ajouter une note complémentaire.
Dans IE7/IE8, lorsque Microsoft a ajouté les onglets à son navigateur, il a cassé un élément qui peut causer des ravages dans votre JS si vous ne faites pas attention.
Imaginez cette mise en page :
MainPage.html
IframedPage1.html (named "foo")
IframedPage2.html (named "bar")
IframedPage3.html (named "baz")
Maintenant, dans le cadre "baz", vous cliquez sur un lien (pas de cible, se charge dans le cadre "baz"), cela fonctionne bien.
Si la page qui est chargée, appelons-la special.html, utilise JS pour vérifier si "it" a un cadre parent nommé "bar", elle retournera true (attendu).
Maintenant, disons que la page special.html, lorsqu'elle se charge, vérifie l'existence du cadre parent et son nom, et si c'est "bar", elle se recharge dans le cadre bar, par exemple.
if(window.parent && window.parent.name == 'bar'){
window.parent.location = self.location;
}
Jusqu'ici tout va bien. Maintenant vient le bug.
Supposons qu'au lieu de cliquer sur le lien original comme d'habitude, et de charger la page special.html dans le cadre "baz", vous avez fait un clic moyen ou choisi de l'ouvrir dans un nouvel onglet.
Lorsque ce nouvel onglet se charge ( sans aucun cadre parental ! ) IE entrera dans une boucle sans fin de chargement de page ! parce qu'IE "copie" la structure du cadre en JavaScript de telle sorte que le nouvel onglet A un parent, et ce parent A le nom "bar".
La bonne nouvelle, c'est que la vérification :
if(self == top){
//this returns true!
}
dans ce nouvel onglet renvoie bien vrai, et vous pouvez donc tester cette condition étrange.
3 votes
Quelques bonnes manières (y compris les commentaires) : tommcfarlin.com/check-if-a-page-is-in-an-iframe
1 votes
Les liens externes ne sont pas un très bon moyen de répondre aux questions. Surtout si le contenu de ces liens externes peut être réduit à
return window.location !== window.parent.location
.