RoBorg ist korrekt, aber ich wollte eine Randnotiz hinzufügen.
In IE7 / IE8 haben Microsoft beim Hinzufügen von Tabs zu ihrem Browser eine Sache kaputt gemacht, die Ihrem JS Schaden zufügt, wenn Sie nicht vorsichtig sind.
Stellen Sie sich dieses Seitenlayout vor:
MainPage.html
IframedPage1.html (named "foo")
IframedPage2.html (named "bar")
IframedPage3.html (named "baz")
Jetzt klicken Sie in Frame "baz" auf einen Link (kein Ziel, lädt in den "baz" Frame), es funktioniert einwandfrei.
Wenn die Seite, die geladen wird, als special.html bezeichnet wird, verwendet JS, um zu überprüfen, ob "es" einen übergeordneten Frame mit dem Namen "bar" hat, wird true (erwartet) zurückgegeben.
Nehmen wir nun an, dass die Seite special.html beim Laden den übergeordneten Frame überprüft (auf Existenz und Namen, und wenn es sich um "Balken" handelt, lädt sie sich selbst in den Balkenrahmen neu, z
if(window.parent && window.parent.name == 'bar'){
window.parent.location = self.location;
}
So weit, ist es gut. Jetzt kommt der Fehler.
Nehmen wir an, Sie klicken nicht wie gewohnt auf den ursprünglichen Link und laden die Seite special.html in den Rahmen "baz", sondern haben mit der mittleren Maustaste darauf geklickt oder sie in einem neuen Tab geöffnet.
Wenn dieser neue Tab geladen wird ( ohne übergeordnete Frames! ), Tritt der IE in eine endlose Schleife des Seitenladens ein! weil IE die Rahmenstruktur in JavaScript "kopiert", so dass die neue Registerkarte ein übergeordnetes Element hat und dieses übergeordnete Element den Namen "bar" hat.
Die gute Nachricht ist, dass überprüft wird:
if(self == top){
//this returns true!
}
In dieser neuen Registerkarte wird true zurückgegeben, und Sie können diese ungerade Bedingung testen.