Window.location: URL текущей страницы | JavaScript

Объект window.location позволяет узнать URL (или его часть) текущей страницы, перезагрузить документ, перейти на другую страницу в текущей вкладке.

Узнать адрес страницы, открыть другую страницу в текущей вкладке

Имитирует переход по ссылке.

location http://shpargalkablog.ru:80/2015/08/html5-history-api.html?log=1#location
<button type="button" onclick="alert(location)">получить URL</button> <button type="button" onclick="location = 'http://css.shpargalkablog.ru/2015/08/window-location-js.html'">перейти на страницу с другим URL</button>
location.origin http://shpargalkablog.ru:80
Используется в заголовке ответа сервера для кроссдоменных запросов, например, с помощью new XMLHttpRequest() <button type="button" onclick="alert(location.origin)">получить протокол, домен, порт</button>
location.protocol http:
<button type="button" onclick="alert(location.protocol)">получить протокол</button> <button type="button" onclick="location.protocol = 'https'">перейти на страницу с другим протоколом</button>
location.host shpargalkablog.ru:80
<button type="button" onclick="alert(location.host)">получить домен, порт</button> <button type="button" onclick="location.host = 'css.shpargalkablog.ru:80'">перейти на страницу с другим доменом, портом</button>
location.hostname shpargalkablog.ru
<button type="button" onclick="alert(location.hostname)">получить домен</button> <button type="button" onclick="location.hostname = 'css.shpargalkablog.ru'">перейти на страницу с другим доменом</button>
location.port 80
Для http:, как правило, порт 80, для https: — 443. Популярные значения большинство браузеров убирают из URL и location.port возвращают пустым <button type="button" onclick="alert(location.port)">получить порт</button> <button type="button" onclick="location.port = '80'">перейти на страницу с другим портом</button>
location.pathname /2015/08/html5-history-api.html
<button type="button" onclick="alert(location.pathname)">получить путь к файлу относительно хоста</button> <button type="button" onclick="alert(location.pathname.split('/')[1])">получить имя первой папки</button> <button type="button" onclick="location.pathname = '/2014/10/window-open-javascript.html'">перейти к другому файлу сайта</button>
location.search ?log=1&name=%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2%20%D0%98%D0%B2%D0%B0%D0%BD
Для GET запросов после знака вопроса (?) в URL вносятся параметры, перечисленные через & <button type="button" onclick="alert(location.search)">получить параметры</button> <button type="button" onclick="alert(decodeURIComponent(location.search))">получить раскодированные кириллические параметры</button> [Источник скрипта: MDN] <button type="button" onclick="alert(getURLParam(location.search, 'name'));">получить значение параметра "name"</button> <script> function getURLParam (oTarget, sVar) { return decodeURI(oTarget.replace(new RegExp("^(?:.*[&\\?]" + encodeURI(sVar).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1")); } </script> URLSearchParams: более современный подход <button type="button" onclick="location.search = 'log=1&name=Иванов Иван'">перейти на страницу с другими параметрами</button>
location.hash #location
Если к URL добавить id элемента вместе с хэшем (#), то страница без перезагрузки будет прокручена к началу этого элемента: подробнее, пример, пример <button type="button" onclick="alert(location.hash)">получить якорь к которому при загрузки прокручивается документ</button> <button type="button" onclick="location.hash = 'location'">добавить (или изменить) якорь в адрес страницы</button>

Редирект на JS: как заменить страницу в текущей вкладке

При нажатии кнопки браузера "Назад" страница, с которой был совершён переход с помощью location.replace(), будет отсутствовать. Похоже на HTTP редирект 301 (поисковики его так не рассматривают).

JavaScript переадресация


<button type="button" onclick="location.replace('http://css.shpargalkablog.ru/2015/08/window-location-js.html')">удалить URL из истории посещений, переместить на другую страницу</button>

Разбить URL на части, изменить часть адреса страницы, перенаправить

Два варианта:


<button type="button" onclick="location.replace('//css.shpargalkablog.ru'+(location.port?':'+location.port:'')+location.pathname)">удалить URL из истории посещений, открыть страницу с другим доменом</button>


<button type="button" id="raz1">удалить URL из истории посещений, открыть страницу с другим доменом</button>

<script>
document.getElementById('raz1').onclick = function() {
  var u = new URL(location);
  u.hostname = 'css.shpargalkablog.ru'; // изменить только домен, подробнее про new URL()
  location.replace(u);
}
</script>

Как перезагрузить страницу


<button type="button" onclick="location.reload()">обновить страницу из кэша (как F5)</button>


<button type="button" onclick="location.reload(true)">обновить страницу с сервера</button>

Как запретить показ страницы в iframe

Это плохой вариант:

<script>
if(top.location != location){
  top.location.replace(location);
}
</script>

В ответе заголовка сервера следует указать Content-Security-Policy.

Как перечислить всё свойства и методы у location



<button type="button" id="raz">получить список всех свойств и методов location</button>

<script>
document.getElementById('raz').onclick = function() {
    var a = '';
    for(var i in location) {
      a += i + ' = "' + location[i] + '";\n'
    }
    alert(a);
}
</script>
в f t
наверх ↑

2 комментария:

Анонимный
Здравствуйте, Наталья!

Спасибо за статью.

Учитывая, что за последние 30 дней появились (обновились) две статьи связанные с URL и кроссдоменностью, было бы неплохо иметь шпаргалку по существующим приёмам обхода безопасности браузеров, связанных с кроссдоменностью.

Ну, и поскольку мы больше front-end-шники, было бы неплохо "на понятном" языке раскрыть некоторое понимание серверных настроек (как и где правильно прописать ответы сервера, настройка проксирования и т.д.)
NMitra
Здравствуйте!

Я стараюсь пока двигаться в сторону window.history. Кривовато получается. Интересные темы Content-Security-Policy и Access-Control-Allow-Origin, но я пока побаиваюсь их. Долго, чувствую, ещё бояться буду :)

Хи-хи, как и где прописывать заголовки я разобралась. Осталось только проработать вопрос что писать и к чему эта писанина приведёт :)

Это всё new XMLHttpRequest(). Вводит меня негодник в php.