RoBorg ma rację, ale chciałem dodać notatkę dodatkową.
W IE7 / IE8, kiedy Microsoft dodał Tabs do swojej przeglądarki, złamali jedną rzecz, która spowoduje spustoszenie w JS, jeśli nie będziesz ostrożny.
Wyobraź sobie ten układ strony:
MainPage.html
IframedPage1.html (named "foo")
IframedPage2.html (named "bar")
IframedPage3.html (named "baz")
Teraz w ramce „baz” klikasz link (bez celu, ładuje się w ramce „baz”), działa dobrze.
Jeśli strona, która zostanie załadowana, nazwijmy ją special.html, używa JS, aby sprawdzić, czy „it” ma ramkę nadrzędną o nazwie „bar”, zwróci wartość true (oczekiwana).
Powiedzmy teraz, że strona special.html podczas ładowania sprawdza ramkę nadrzędną (pod kątem istnienia i jej nazwy, a jeśli jest to „pasek”, ładuje się ponownie w ramce paska, np.
if(window.parent && window.parent.name == 'bar'){
window.parent.location = self.location;
}
Na razie w porządku. Teraz nadchodzi błąd.
Powiedzmy, że zamiast klikać oryginalny link jak zwykle i ładować stronę special.html w ramce „baz”, kliknąłeś ją środkowo lub zdecydowałeś się otworzyć w nowej karcie.
Gdy ta nowa karta zostanie załadowana ( bez żadnych ramek nadrzędnych! ) IE przejdzie do niekończącej się pętli ładowania strony! ponieważ IE „kopiuje” strukturę ramki w JavaScript, tak że nowa karta MUSI mieć element nadrzędny, a ten element nadrzędny MA NAZWĘ „pasek”.
Dobrą wiadomością jest to, że sprawdzanie:
if(self == top){
//this returns true!
}
w tej nowej karcie zwraca wartość true, a zatem można przetestować ten dziwny warunek.