RoBorg est correct, mais je voulais ajouter une note latérale.
Dans IE7 / IE8, lorsque Microsoft a ajouté des onglets à son navigateur, il a cassé une chose qui causera des ravages avec 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", il retournera true (attendu).
Disons maintenant que la page special.html lors de son chargement, vérifie le cadre parent (pour l'existence et son nom, et s'il s'agit de "bar", elle se recharge dans le cadre de la barre. Ex.
if(window.parent && window.parent.name == 'bar'){
window.parent.location = self.location;
}
Jusqu'ici tout va bien. Maintenant vient le bug.
Disons qu'au lieu de cliquer sur le lien d'origine comme d'habitude, et de charger la page special.html dans le cadre "baz", vous avez cliqué avec le bouton du milieu ou choisi de l'ouvrir dans un nouvel onglet.
Lorsque ce nouvel onglet se charge ( sans aucun cadre parent! ), IE entrera dans une boucle sans fin de chargement de page! car IE "copie" la structure du cadre en JavaScript de telle sorte que le nouvel onglet A un parent et que 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 retourne vrai, et donc vous pouvez tester cette condition étrange.