RoBorg doğru, ama bir yan not eklemek istedim.
IE7 / IE8'de Microsoft tarayıcılarına Sekmeler eklediğinde, dikkatli olmazsanız JS'nize zarar verecek bir şeyi kırdılar.
Bu sayfa düzenini düşünün:
MainPage.html
IframedPage1.html (named "foo")
IframedPage2.html (named "bar")
IframedPage3.html (named "baz")
Şimdi "baz" karesinde bir linke tıklıyorsunuz (hedef yok, "baz" karesine yükler) iyi çalışıyor.
Yüklenen sayfa bunu special.html olarak adlandıralım, "it" öğesinin "bar" adında bir üst kareye sahip olup olmadığını kontrol etmek için JS kullanır ve true (beklenen) döndürür.
Şimdi special.html sayfasının yüklendiğinde, üst çerçeveyi kontrol ettiğini (varlığını ve adını ve "bar" ise kendisini çubuk çerçevesine yeniden yüklediğini varsayalım.
if(window.parent && window.parent.name == 'bar'){
window.parent.location = self.location;
}
Çok uzak çok iyi. Şimdi hata geliyor.
Diyelim ki normal gibi orijinal bağlantıya tıklamak ve özel.html sayfasını "baz" çerçevesine yüklemek yerine, orta tıklatıp yeni bir Sekmede açmayı seçtiniz.
Bu yeni sekme yüklendiğinde ( hiç ana çerçeve olmadan! ) IE, sonsuz bir sayfa yükleme döngüsü girecektir!çünkü IE, yeni sekmenin bir üst öğeye sahip olacağı ve üst öğenin "bar" adını taşıdığı şekilde JavaScript'teki çerçeve yapısını "kopyalar".
İyi haber şu ki:
if(self == top){
//this returns true!
}
bu yeni sekmede true değerini döndürür ve böylece bu garip koşulu test edebilirsiniz.