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



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



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

842   10  

10 ответов:

да document.location = "http://my.new.url.com"

вы также можете извлекать его таким же образом, например.

var myURL = document.location;
document.location = myURL + "?a=parameter";

объект location также имеет ряд полезных свойств:

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: Установка хэша документа.расположение не должно перезагружать страницу, просто измените, где на странице находится фокус. Так что обновление до #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)

да

документ.расположение-это нормальный путь.

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

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

в чем разница между окном.местонахождение и документ.расположение в JavaScript?

использовать

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

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

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

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

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

простой javascript: документ.location = 'http://www.google.com';

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

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

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

определите новый объект URL, назначьте ему текущий url, добавьте свои параметры к этому объекту URL и, наконец, переместите его в состояние браузера.

var url = new URL(window.location.href);
//var url = new URL(window.location.origin + window.location.pathname) <- flush existing parameters
url.searchParams.append("order", orderId);
window.history.pushState(null, null, url);

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

Comments

    Ничего не найдено.