Роборг правильный, но я хотел добавить примечание.
В IE7 / IE8, когда Microsoft добавила вкладки в свой браузер, они сломали одну вещь, которая приведет к хаосу в вашем JS, если вы не будете осторожны.
Представьте себе макет этой страницы:
MainPage.html
IframedPage1.html (named "foo")
IframedPage2.html (named "bar")
IframedPage3.html (named "baz")
Теперь во фрейме "baz" вы нажимаете на ссылку (нет цели, загружается в фрейм "baz"), она работает нормально.
Если загружаемая страница, назовем ее special.html, использует JS, чтобы проверить, есть ли у «родительского» фрейма с именем «bar», она вернет true (ожидаемо).
Теперь допустим, что страница special.html при загрузке проверяет родительский фрейм (на наличие и его имя, и, если это "bar", он перезагружается в фрейме bar. Например,
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!
}
в этой новой вкладке возвращает true, и, таким образом, вы можете проверить это странное условие.