Подтвердить что ты не робот

Как мы обновляем URL или строки запроса с помощью javascript/jQuery без перезагрузки страницы?

Есть ли способ обновить URL-адрес программно без перезагрузки страницы?

EDIT: я добавил что-то в заголовке в сообщении. Я просто хочу пояснить, что я не хочу перезагружать страницу

4b9b3361

Ответ 1

Да - 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-адрес указывает пользователю, где он находится на вашем сайте. Если вы измените его, не изменяя содержимое страницы, он становится немного запутанным.

Ответ 2

Да и нет. У всех обычных веб-браузеров есть мера безопасности, чтобы предотвратить это. Цель состоит в том, чтобы предотвратить создание пользователями реплик веб-сайтов, изменить 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

Ответ 3

Вы можете использовать:

window.history.pushState('obj', 'newtitle', newUrlWithQueryString)

Ответ 4

Да

document.location - обычный способ.

Однако document.location фактически совпадает с window.location, за исключением того, что window.location немного более поддерживается в старых браузерах, поэтому может быть предпочтительным выбором.

Посмотрите эту тему на SO для получения дополнительной информации:

В чем разница между window.location и document.location в JavaScript?

Ответ 5

Обычный javascript: document.location = 'http://www.google.com';

Это приведет к обновлению браузера - подумайте об использовании хэшей, если вам нужно обновить URL, чтобы реализовать какую-то историю просмотров без перезагрузки страницы. Вы можете посмотреть в jQuery.hashchange, если это так.

Ответ 6

Вам нужно быть более конкретным. Что вы понимаете под "обновлением URL"? Это может означать автоматическое переключение на другую страницу, что, безусловно, возможно.

Если вы хотите просто обновить содержимое адресной строки без перезагрузки страницы, см. Изменить URL-адрес без перезагрузки страницы

Ответ 7

Префикс URL изменяется с помощью хэштегов, чтобы избежать перенаправления.

Это перенаправляет

location.href += '&test='true';

Это не перенаправляет

location.href += '#&test='true';

Ответ 8

Да - document.location.hash для запросов