Должен ли я использовать window.navigate или document.location в JavaScript?

177

Какой предпочтительный метод используется для изменения местоположения текущей веб-страницы с помощью JavaScript? Я видел как window.navigate, так и document.location. Есть ли различия в поведении? Есть ли различия в реализации браузера?

dthrasher
источник

Ответы:

220
window.location.href = 'URL';

стандартная реализация для изменения местоположения текущего окна.

Джеймс Скидмор
источник
22
У вас есть ссылка, чтобы указать, что window.location.href является стандартной реализацией? И применяется ли этот стандарт одинаково хорошо ко всем браузерам? Вы, безусловно, обладаете знаниями и более 15 голосов (плюс принятый ответ) помогают сделать его более авторитетным, хотя я думаю, что было бы лучше получить документацию от команд разработчиков браузеров для подтверждения претензии.
Goyuix
6
@Goyuix, наверное, точнее сказать, что window.location.hrefэто полная реализация, но она window.locationвыполняет то же самое. См. Docs.sun.com/source/816-6408-10/location.htm : «Если вы назначаете строку locationсвойству объекта, JavaScript создает locationобъект и назначает эту строку его hrefсвойству».
Джеймс Скидмор
3
Похоже, эти парни решили, что это личное предпочтение: developer.mozilla.org/Talk:en/DOM/window.location . Или посмотрите пример внизу, они только используют, window.locationно это не обязательно указывает на один из способов: developer.mozilla.org/en/window.location .
Джеймс Скидмор
1
Я в настоящее время использую это для разработки Android. У меня проблемы с перенаправлением страницы из JS в браузере Android по умолчанию. Я попробовал, window.location.href = 'URL';а также window.location.assign('URL');метод, который предназначен для перезагрузки новой страницы. Дополнительную информацию можно найти на w3schools.com/jsref/obj_location.asp
philipp
3
window.navigateэто запатентованный метод, используемый Internet Explorer (я уверен, что другие браузеры имитируют его для совместимости, Chrome - нет). document.locationили window.locationявляются стандартными объектами (см. различные спецификации HTML / HTML5 / DOM). document.location = someURL(или window.location = someURL) возможно поддерживается из-за устаревшего кода. Правильный способ сделать это document.location.href = someURL, или, возможно document.location.assign(someURL).
PhistucK
11

window.navigate не поддерживается в некоторых браузерах

В Java-скрипте существует много способов перенаправления, см. Приведенный ниже код и пояснения.

window.location.href = "http://krishna.developerstips.com/";
window.location = "http://developerstips.com/";
window.location.replace("http://developerstips.com/");
window.location.assign("http://work.developerstips.com/");

window.location.href загружает страницу из кэша браузера и не всегда отправляет запрос на сервер. Таким образом, если у вас есть старая версия страницы, доступная в кеше, она будет перенаправлена ​​туда вместо загрузки новой страницы с сервера.

Метод window.location.assign () для перенаправления, если вы хотите разрешить пользователю использовать кнопку «Назад» для возврата к исходному документу.

Метод window.location.replace (), если вы хотите перенаправить на новую страницу и не разрешать пользователю переходить на исходную страницу с помощью кнопки «Назад».

Srikrushna
источник
7

document.locatio n (устаревшее, но все еще присутствует) строковое свойство, доступное только для чтения, заменяется document.url .

Kennebec
источник
6

window.location также влияет на раму,

лучшая форма, которую я нашел:

parent.window.location.href

И тем хуже

parent.document.URL 

Я провел масштабное тестирование браузера, и некоторые редкие IE с несколькими плагинами стали неопределенными со второй формой.

jolmos
источник
По этой логике, не будет ли top.window.location.href еще лучше?
Орвеллофил
6

window.locationповлияет на цель вашего браузера. document.location повлияет только на ваш браузер и фрейм / фрейм.

Алдри Жень
источник
4

window.navigateНЕ поддерживается в некоторых браузерах, поэтому его следует избегать. Любой из других методов, использующих свойство location, является наиболее надежным и последовательным подходом.

Трой Грош
источник
2

Я бы пошел с window.location = "http://...";. Я программировал кросс-браузерный JavaScript в течение нескольких лет, и у меня никогда не возникало проблем с использованием этого подхода.

window.navigateи window.location.hrefкажется немного странным для меня.

cllpse
источник
13
window.location работает, но технически некорректно, потому что "location" - это объект.
Джеймс Скидмор
16
Но все в JavaScript - это объект :)
cllpse
1
Несмотря на то, что практически все объекты в JavaScript являются объектами, назначение строки объекту обычно не устанавливает значение одного из его свойств (как это делают window.location или document.location со свойством href), а вместо этого заменяет этот объект на строка. В этом случае была добавлена ​​особенность браузера, чтобы быть совместимой с существующими (причудливыми) реализациями и устаревшим (и не очень устаревшим) контентом.
PhistucK
1

Там действительно нет разницы; Есть около 5 различных способов сделать это. Тем не менее, те, которые я вижу чаще всего, document.locationи window.locationпотому что они поддерживаются всеми основными браузерами. (Я лично никогда не видел window.navigate, чтобы он использовался в рабочем коде, так что, может быть, он не очень хорошо поддерживает?)

Саша Чедыгов
источник
document.location не работает во всех браузерах. window.location делает.
Филипп Лейберт
2
Firefox не поддерживает window.navigate
Эндрю Гарри
0

поддержка document.locationтакже хороша, хотя это устаревший метод. Я использовал этот метод некоторое время без проблем. Вы можете обратиться сюда для более подробной информации:

https://developer.mozilla.org/en-US/docs/Web/API/document.location

Анкур Гоял
источник
-5

Вы можете переместить свою страницу, используя

window.location.href =Url;
Вишну Гупта
источник
3
Это на самом деле не добавляет больше информации, чем принятый, и многовариантный ответ ...
Стюарт Зиглер
3
Вы могли бы даже пойти дальше и утверждать, что вы просто заняли плагиат принятого ответа
Лиам