Разница между window.location.href = window.location.href и window.location.reload () - PullRequest
182 голосов
/ 09 марта 2010

В чем разница между JavaScript

window.location.href = window.location.href

и

window.location.reload()

функции

Ответы [ 11 ]

232 голосов
/ 09 марта 2010

Если я правильно помню, window.location.reload() перезагружает текущую страницу с данными POST, тогда как window.location.href=window.location.href не включает данные POST.

Как отметил @ W3Max в комментариях ниже, window.location.href=window.location.href не будет перезагружать страницу, если в URL есть якорь (#) - в этом случае вы должны использовать window.location.reload().

Кроме того, как отмечает @Mic ниже, window.location.reload() принимает дополнительный аргумент skipCache, чтобы при использовании window.location.reload(true) браузер пропустил кэш и перезагрузил страницу с сервера. window.location.reload(false) поступит наоборот и загрузит страницу из кэша, если это возможно.

51 голосов
/ 09 марта 2010

Если вы скажете window.location.reload(true), браузер пропустит кэш и перезагрузит страницу с сервера. window.location.reload(false) сделает наоборот.

Примечание: default значение для window.location.reload() равно false

29 голосов
/ 23 февраля 2011

Разница в том, что

window.location = document.URL;

не будет перезагружать страницу, если в URL есть хеш (#) (с чем-либо или без него), тогда как

window.location.reload();

перезагрузит страницу.

18 голосов
/ 23 февраля 2011

Если вы добавите логическое значение true для перезагрузки window.location.reload(true) будет загружаться с сервера.

Не ясно, насколько поддерживается этот логический тип, W3Org упоминает, что NS использовался для поддержки it

МОЖЕТ быть разница между содержимым window.location.href и document.URL - по крайней мере раньше существовала разница между location.href и нестандартным и устаревшим document.location , который имел отношение к перенаправлению, но это действительно последнее тысячелетие.

В целях документации я бы использовал window.location.reload () , потому что это то, что вы хотите сделать.

14 голосов
/ 13 июня 2013

Как уже говорилось, изменение href при наличии хеша (#) в URL не приведет к перезагрузке страницы.Таким образом, я использую это для перезагрузки вместо регулярных выражений:

if (!window.location.hash) {
    window.location.href = window.location.href;
} else {
    window.location.reload();
}
6 голосов
/ 16 мая 2012

Различие в Firefox (12.0) заключается в том, что на странице, отображаемой с помощью POST, reload () выдаст предупреждение и сделает повторную публикацию, в то время как назначение URL сделает GET.

Google Chrome делает GET для обоих.

6 голосов
/ 20 сентября 2011

Столкнулся с этим вопросом, исследуя какое-то неправильное поведение в IE, в частности IE9, не проверял более старые версии. Кажется

window.location.reload();

приводит к обновлению, которое на секунду закрывает весь экран, где

 window.location = document.URL;

обновляет страницу гораздо быстрее, почти незаметно.

Проведя немного больше исследований и поэкспериментировав с fiddler, кажется, что window.location.reload() обойдет кеш и перезагрузится с сервера, независимо от того, передаете ли вы логическое значение с ним или нет, это включает получение всех ваших активов (изображений , сценарии, таблицы стилей и т. д.) снова. Так что, если вы просто хотите, чтобы страница обновляла HTML, window.location = document.URL вернется намного быстрее и с меньшим трафиком.

Различие в поведении между браузерами заключается в том, что когда IE9 использует метод перезагрузки, он очищает видимую страницу и, по-видимому, перестраивает ее с нуля, где FF и chrome ждут, пока они получат новые ресурсы, и восстановят их, если они будут другими.

3 голосов
/ 07 марта 2013

Используя JSF, у меня возникла проблема с обновлением после истечения сеанса: PrimeFaces ViewExpiredException после перезагрузки страницы , и после некоторых исследований я обнаружил одно отличие в FireFox:

Вызов window.location.reload() работает как нажатие значка обновления на FF, добавляет строку

Cache-Control max-age=0

при установке window.location.href работает как нажатие клавиши ENTER в строке URL, она не отправляет эту строку.

Хотя оба они отправляются как GET, первый (перезагрузка) восстанавливает предыдущие данные, и приложение находится в несогласованном состоянии.

1 голос
/ 23 февраля 2011

из моего опыта около 3 лет, я не мог найти никакой разницы ...

edit: да, как сказал один из них, разница только в передаче логического параметра в window.location.reload (). если вы передадите true , то браузер загрузит новую страницу, но если false , то загружается версия кеша ...

1 голос
/ 23 февраля 2011

Нет, не должно быть. Тем не менее, возможно, что в некоторых браузерах есть различия, поэтому один из них (или ни один) может не работать в некоторых случаях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...