RoBorg è corretto, ma volevo aggiungere una nota a margine.
In IE7 / IE8 quando Microsoft ha aggiunto Tab al loro browser hanno rotto una cosa che causerà il caos con il tuo JS se non stai attento.
Immagina questo layout di pagina:
MainPage.html
IframedPage1.html (named "foo")
IframedPage2.html (named "bar")
IframedPage3.html (named "baz")
Ora nel frame "baz" fai clic su un link (nessun target, carica nel frame "baz") funziona bene.
Se la pagina che viene caricata, chiamiamola special.html, usa JS per verificare se "esso" ha un frame principale chiamato "bar", restituirà vero (previsto).
Ora supponiamo che la pagina special.html quando viene caricata, controlla il frame principale (per l'esistenza e il suo nome, e se è "bar" si ricarica nel frame bar. Es.
if(window.parent && window.parent.name == 'bar'){
window.parent.location = self.location;
}
Fin qui tutto bene. Ora arriva il bug.
Diciamo invece di fare clic sul collegamento originale come al solito, e caricando la pagina special.html nel frame "baz", hai fatto clic con il pulsante centrale o hai scelto di aprirlo in una nuova scheda.
Quando quella nuova scheda viene caricata ( senza frame principali! ) IE entrerà in un ciclo infinito di caricamento della pagina! perché IE "copia" la struttura del frame in JavaScript in modo tale che la nuova scheda abbia un padre e che il padre abbia il nome "barra".
La buona notizia è che controllando:
if(self == top){
//this returns true!
}
in quella nuova scheda ritorna vero, e quindi puoi provare questa strana condizione.