RoBorg вірно, але я хотів додати бічну ноту.
У IE7 / IE8, коли Microsoft додав Tabs до свого браузера, вони зламали одне, що спричинить хаос у вашому JS, якщо ви не будете обережні.
Уявіть макет цієї сторінки:
MainPage.html
IframedPage1.html (named "foo")
IframedPage2.html (named "bar")
IframedPage3.html (named "baz")
Тепер у кадрі "baz" ви натискаєте на посилання (без мети, завантаження у кадр "baz"), воно працює чудово.
Якщо сторінка, що завантажується, дозволить її назвати special.html, використовує JS, щоб перевірити, чи є в "батьківщині" кадр під назвою "bar", він повернеться істинним (очікуваним).
Тепер скажемо, що сторінка special.html, коли вона завантажується, перевіряє батьківський кадр (на наявність та його ім'я, а якщо він є "бар", він перезавантажується в рамку бар. Наприклад
if(window.parent && window.parent.name == 'bar'){
window.parent.location = self.location;
}
Все йде нормально. Зараз приходить помилка.
Скажімо, замість того, щоб натискати на оригінальне посилання, як звичайне, та завантажуючи сторінку special.html у рамку "baz", ви клацнули її середнім клавішею або вирішили відкрити її в новій вкладці.
Коли ця нова вкладка завантажується ( без батьківських кадрів взагалі! ) IE ввійде в нескінченний цикл завантаження сторінки! тому що IE "копіює" структуру кадру в JavaScript таким чином, що нова вкладка ДОБЕ має батьківський, а цей батько має ім'я "bar".
Хороша новина полягає в тому, що перевірка:
if(self == top){
//this returns true!
}
у цій новій вкладці повертається істина, і, таким чином, ви можете перевірити наявність цього дивного стану.