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