RoBorg es correcto, pero quería agregar una nota al margen.
En IE7 / IE8 cuando Microsoft agregó pestañas a su navegador, rompieron una cosa que causará estragos en su JS si no tiene cuidado.
Imagina este diseño de página:
MainPage.html
IframedPage1.html (named "foo")
IframedPage2.html (named "bar")
IframedPage3.html (named "baz")
Ahora, en el marco "baz", hace clic en un enlace (sin destino, se carga en el marco "baz") funciona bien.
Si la página que se carga, llamémosla special.html, usa JS para verificar si "it" tiene un marco principal llamado "bar", devolverá verdadero (esperado).
Ahora digamos que la página special.html cuando se carga, comprueba el marco principal (para ver si existe y su nombre, y si es "bar", se recarga en el marco de la barra, p. Ej.
if(window.parent && window.parent.name == 'bar'){
window.parent.location = self.location;
}
Hasta aquí todo bien. Ahora viene el error.
Digamos que en lugar de hacer clic en el enlace original como de costumbre y cargar la página special.html en el marco "baz", hizo clic con el botón central o eligió abrirlo en una pestaña nueva.
Cuando se carga esa nueva pestaña (¡ sin ningún marco principal en absoluto! ) IE entrará en un ciclo infinito de carga de página. porque IE "copia" la estructura del marco en JavaScript de modo que la nueva pestaña TIENE un padre, y ese padre TIENE el nombre "barra".
La buena noticia es que verificamos:
if(self == top){
//this returns true!
}
en esa nueva pestaña se devuelve verdadero y, por lo tanto, puede probar esta extraña condición.