Разница между window.location.href и top.location.href

93

Кто-нибудь может сказать мне разницу между window.location.hrefи top.location.href?

А также где использовать какой.

А какой будет лучше при перенаправлении после вызова ajax в mvc?

Эгалитарный
источник
Я забыл упомянуть, что мне пришлось перенаправить на новый URL-адрес в .net MVC ... когда я использовал top.location.href, он работал, тогда как window.location не работал ... вы также можете сказать причину, почему ????
Egalitar

Ответы:

125

window.location.href возвращает расположение текущей страницы.

top.location.href(который является псевдонимом window.top.location.href) возвращает расположение самого верхнего окна в иерархии окон. Если у окна нет родителя, topэто ссылка на себя (другими словами, window=== window.top).

topполезен как при работе с фреймами, так и при работе с окнами, открытыми другими страницами. Например, если у вас есть страница, вызываемая test.htmlследующим скриптом:

var newWin=window.open('about:blank','test','width=100,height=100');
newWin.document.write('<script>alert(top.location.href);</script>');

В итоговом предупреждении будет указан полный путь к test.html, а не about: blank, который window.location.hrefвернет.

Чтобы ответить на ваш вопрос о перенаправлении, воспользуйтесь window.location.assign(url);

josh3736
источник
3
Является ли это правильно назвать top.location.hrefв псевдоним из window.top.location.href? Я думал , что так называемый «глобальный» переменная действительно сокращенная для свойства в windowто время как псевдоним означает , что независимая переменная , которая указывает на то же место.
just.another.programmer
25

topобъект имеет больше смысла внутри фреймов. Внутри фрейма windowотносится к окну текущего фрейма, а topотносится к самому внешнему окну, которое содержит фрейм (-ы). Так:

window.location.href = 'somepage.html';означает загрузку somepage.htmlвнутри фрейма.

top.location.href = 'somepage.html';означает загрузку somepage.htmlв главном окне браузера.

Два других интересных объекта - это selfи parent.

Салман А
источник
9

topотносится к объекту окна, который содержит все текущие кадры (отец остальных окон). windowэто текущий window.

http://www.howtocreate.co.uk/tutorials/javascript/browserinspecific

поэтому top.location.hrefможет содержать ссылку на «главную» страницу, содержащую все фреймы, в то время window.location.hrefкак содержит только ссылку на «текущую» страницу.

Медер Омуралиев
источник
7

Первый добавляет элемент в вашу историю, в котором вы можете (или должны иметь возможность) нажать «Назад» и вернуться на текущую страницу.

Второй заменяет текущий элемент истории, поэтому вы не можете вернуться к нему.

Смотрите window.location:

  • assign(url): Загрузите документ по указанному URL.

  • replace(url): Заменить текущий документ документом по указанному URL. Отличие от assign()метода заключается в том, что после использования replace()текущая страница не будет сохранена в истории сеанса, то есть пользователь не сможет использовать кнопку «Назад» для перехода к ней.

window.location.href = url;

предпочтение перед:

window.location = url;
Сачин Р
источник
Для проблемы CORS он не работает ... как это решить?
Pra_A 03