В чем разница между
window.location.href = window.location.href
и
window.location.reload()
функции?
В чем разница между
window.location.href = window.location.href
и
window.location.reload()
функции?
Если я правильно помню, 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)
сделает все наоборот и загрузит страницу из кеша, если это возможно.
Если вы скажете window.location.reload(true)
, браузер пропустит кеш и перезагрузит страницу с сервера. window.location.reload(false)
поступит наоборот.
Примечание: значение default
для window.location.reload()
равно false
Отличие состоит в том, что
window.location = document.URL;
не перезагружает страницу, если в URL есть хеш (#) (с или без чего-то после него), тогда как
window.location.reload();
перезагрузит страницу.
Если вы добавите логическое значение true для перезагрузки
window.location.reload(true)
он будет загружаться с сервера.
Неясно, как поддерживается это логическое значение, W3Org упоминает, что NS использовал его для поддержки
Там может быть разница между содержимым window.location.href и document.URL - там, по крайней мере, была разница между location.href и нестандартный и устаревший document.location, который был связан с перенаправлением, но это действительно последнее тысячелетие.
В целях документации я бы использовал window.location.reload(), потому что это то, что вы хотите сделать.
Как сказано, изменение href, когда есть хэш (#) в URL-адресе, не перезагружает страницу. Таким образом, я использую это, чтобы перезагрузить его вместо регулярных выражений:
if (!window.location.hash) {
window.location.href = window.location.href;
} else {
window.location.reload();
}
В этом вопросе, исследующем некоторые отклоняющиеся действия в IE, в частности IE9, не проверялись более старые версии. Кажется,
window.location.reload();
приводит к обновлению, которое заполняет весь экран на секунду, где
window.location = document.URL;
обновляет страницу гораздо быстрее, почти незаметно.
Проводя немного больше исследований и экспериментируя с скрипачом, кажется, что window.location.reload()
будет обходить кеш и перезагружать сервер, независимо от того, передаете ли вы его логическое или нет, это включает в себя получение всех ваших активов (изображений, скрипты, таблицы стилей и т.д.). Поэтому, если вы просто хотите, чтобы страница обновляла HTML, window.location = document.URL
будет возвращаться намного быстрее и с меньшим трафиком.
Разница в поведении между браузерами заключается в том, что, когда IE9 использует метод перезагрузки, он очищает видимую страницу и, по-видимому, перестраивает ее с нуля, где FF и chrome ждут, пока не получат новые активы и не перестроят их, если они отличаются.
Разница в Firefox (12.0) заключается в том, что на странице, полученной из POST, reload() выведет предупреждение и сделает повторную запись, в то время как назначение URL сделает GET.
Google Chrome выполняет GET для обоих.
Использование JSF, теперь у меня проблема с обновлением после истечения срока действия сессии: PrimeFaces ViewExpiredException после перезагрузки страницы, и с некоторым расследованием я нашел одно отличие в FireFox
Вызов window.location.reload()
работает как щелчок на значке обновления в FF, он добавляет строку
Cache-Control max-age=0
а установка window.location.href
работает как нажатие ENTER в строке URL, оно не отправляет эту строку.
Хотя оба отправляются как GET, первая (перезагрузка) восстанавливает предыдущие данные, и приложение находится в противоречивом состоянии.
Нет, не должно быть. Однако, возможно, в некоторых браузерах существуют различия, поэтому либо (или ни один) может не работать в некоторых случаях.
по моему опыту около 3 лет, я не мог найти разницы...
edit: да, как сказал один из них, только передача логического параметра в window.location.reload() - это разница. если вы передадите true, браузер загрузит новую страницу, но если false, то загружается версия кеша...
В нашем случае мы просто хотим перезагрузить страницу в веб-просмотре, и по некоторым причинам мы не могли понять почему! Мы пробуем почти все решения, которые были в Интернете, но застряли без перезагрузки, используя location.reload() или альтернативные решения, такие как window.location.reload(), location.reload(true),...!
Вот наше простое решение:
Просто используйте & lt; a> тег с пустым значением атрибута "href", например:
< a href="" ...>Click Me</a>
(в некоторых случаях вы должны использовать "return true" при нажатии на цель, чтобы вызвать перезагрузку)
Для получения дополнительной информации проверьте этот вопрос: Допустим ли пустой href?
window.location.href, это как спасло мою жизнь в веб-просмотре от Android 5.1. Страница не перезагружается с помощью location.reload() в этой версии с Android.