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

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

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

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

Ответ 1

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

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

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

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);

Ответ 2

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

См. window.location:

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

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

window.location.href = url;

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

window.location = url;