Есть ли способ обновить URL-адрес программно без перезагрузки страницы?
EDIT: я добавил что-то в заголовке в сообщении. Я просто хочу пояснить, что я не хочу перезагружать страницу
Есть ли способ обновить URL-адрес программно без перезагрузки страницы?
EDIT: я добавил что-то в заголовке в сообщении. Я просто хочу пояснить, что я не хочу перезагружать страницу
Да - document.location = "http://my.new.url.com"
Вы также можете получить его таким же образом, например.
var myURL = document.location;
document.location = myURL + "?a=parameter";
У объекта местоположения также есть ряд полезных свойств:
hash Returns the anchor portion of a URL
host Returns the hostname and port of a URL
hostname Returns the hostname of a URL
href Returns the entire URL
pathname Returns the path name of a URL
port Returns the port number the server uses for a URL
protocol Returns the protocol of a URL
search Returns the query portion of a URL
EDIT:
Установка хэша document.location не должна перезагружать страницу, просто измените, где на странице находится фокус. Поэтому обновление до #myId
будет прокручиваться до элемента с помощью id="myId"
. Если id
не существует, я верю, что ничего не произойдет? (Нужно подтвердить в разных браузерах)
EDIT2: Чтобы это было ясно, а не только в комментарии:
Вы не можете обновить весь URL-адрес с помощью javascript без изменения страницы, это ограничение безопасности. В противном случае вы можете щелкнуть ссылку на случайную страницу, созданную как gmail, и мгновенно изменить URL-адрес на www.gmail.com и украсть данные для входа в систему.
Вы можете изменить часть после домена в некоторых браузерах, чтобы справиться с вещами стиля AJAX, но это уже связано с Осирисом. Что еще, вы, вероятно, не должны этого делать, даже если бы могли. URL-адрес указывает пользователю, где он находится на вашем сайте. Если вы измените его, не изменяя содержимое страницы, он становится немного запутанным.
Да и нет. У всех обычных веб-браузеров есть мера безопасности, чтобы предотвратить это. Цель состоит в том, чтобы предотвратить создание пользователями реплик веб-сайтов, изменить URL-адрес, чтобы он выглядел корректно, а затем уметь обманывать людей и получать их информацию.
Однако некоторые HTML5-совместимые веб-браузеры реализовали API истории, который можно использовать для чего-то похожего на то, что вы хотите:
if (history.pushState) {
var newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?myNewUrlQuery=1';
window.history.pushState({path:newurl},'',newurl);
}
Я тестировал, и он работал нормально. Он не перезагружает страницу, но позволяет изменять URL-запрос. Вы не сможете изменить протокол или значения хоста.
Для получения дополнительной информации:
http://diveintohtml5.info/history.html
https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history
Вы можете использовать:
window.history.pushState('obj', 'newtitle', newUrlWithQueryString)
Да
document.location - обычный способ.
Однако document.location фактически совпадает с window.location, за исключением того, что window.location немного более поддерживается в старых браузерах, поэтому может быть предпочтительным выбором.
Посмотрите эту тему на SO для получения дополнительной информации:
В чем разница между window.location и document.location в JavaScript?
Обычный javascript: document.location = 'http://www.google.com';
Это приведет к обновлению браузера - подумайте об использовании хэшей, если вам нужно обновить URL, чтобы реализовать какую-то историю просмотров без перезагрузки страницы. Вы можете посмотреть в jQuery.hashchange, если это так.
Вам нужно быть более конкретным. Что вы понимаете под "обновлением URL"? Это может означать автоматическое переключение на другую страницу, что, безусловно, возможно.
Если вы хотите просто обновить содержимое адресной строки без перезагрузки страницы, см. Изменить URL-адрес без перезагрузки страницы
Префикс URL изменяется с помощью хэштегов, чтобы избежать перенаправления.
Это перенаправляет
location.href += '&test='true';
Это не перенаправляет
location.href += '#&test='true';
Да - document.location.hash
для запросов