- Редирект на JS: как заменить страницу в текущей вкладке
- Как перезагрузить страницу
- Document.referrer: узнать URL предыдущей страницы
- Document.title: получить title страницы
- Window.open(): открыть новое окно
- Window.history: изменить URL без смены документа
- Event.preventDefault(): запретить переход по ссылке
- Ссылка меняет адрес фрейма: атрибут target="nameIframe"
- ContentWindow: доступ к содержимому iframe
Объект 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>
2 комментария:
Спасибо за статью.
Учитывая, что за последние 30 дней появились (обновились) две статьи связанные с URL и кроссдоменностью, было бы неплохо иметь шпаргалку по существующим приёмам обхода безопасности браузеров, связанных с кроссдоменностью.
Ну, и поскольку мы больше front-end-шники, было бы неплохо "на понятном" языке раскрыть некоторое понимание серверных настроек (как и где правильно прописать ответы сервера, настройка проксирования и т.д.)
Я стараюсь пока двигаться в сторону window.history. Кривовато получается. Интересные темы Content-Security-Policy и Access-Control-Allow-Origin, но я пока побаиваюсь их. Долго, чувствую, ещё бояться буду :)
Хи-хи, как и где прописывать заголовки я разобралась. Осталось только проработать вопрос что писать и к чему эта писанина приведёт :)
Это всё new XMLHttpRequest(). Вводит меня негодник в php.