Значением этого свойства является объект типа Location.
Объект Location
Метод toString этого объекта возвращает URL, а различные свойства позволяют получить/установить отдельные компоненты адреса.
Для некоторых строковых операций необходимо явно преобразовать Location к строке:
window.location.toString().charAt(17)
Свойства объекта Location
Все следующие свойства являются строками.
Колонка "Пример" содержит их значения для URL:
http://www.google.com:80/search?q=javascript#test
Свойство
Описание
Пример
hash
часть URL, которая идет после символа решетки '#', включая символ '#'
#test
host
хост и порт
www.google.com:80
href
весь URL
http://www.google.com:80/search?q=javascript#test
hostname
хост (без порта)
www.google.com
pathname
строка пути (относительно хоста)
/search
port
номер порта
80
protocol
протокол
http:
search
часть адреса после символа ?, включая символ ?
?q=javascript
В Firefox есть баг: если hash-компонент адреса содержит закодированные (см. encodeURIComponent) символы, свойство hash возвращает раскодированный компонент. Например, вместо %20 будет пробел и т.п. Другие браузеры ведут себя корректно и не раскодируют hash.
Методы объекта Location
assign(url)
загрузить документ по данному url
reload([forceget])
перезагрузить документ по текущему URL. Аргумент forceget - булево значение, если оно true, то документ перезагружается всегда с сервера, если false или не указано, то браузер может взять страницу из своего кэша.
replace(url)
заменить текущий документ на документ по указанному url. Разница, по сравнению с assign() заключается в том, что после использования replace() страница не записывается в истории посещений. В частности, это значит, что посетитель не сможет использовать для возврата кнопку браузера "Назад".
toString()
возвращает строковое представление URL для объекта Location
При изменении любых свойств window.location, кроме hash, документ будет перезагружен, как если бы для модифицированного url был вызван метод window.location.assign().
Пример: перейти на документ по адресу
function goJs() {
window.location = "http://javascript.ru"
}
Пример: вывести свойства текущего location
function showLoc() {
var x = window.location;
var t = ['Property - Typeof - Value',
'window.location - ' + (typeof x) + ' - ' + x ];
for (var prop in x){
t.push(prop + ' - ' + (typeof x[prop]) + ' - ' + (x[prop] || 'n/a'));
}
alert(t.join('\n'));
}
Пример: сделать запрос с новыми параметрами
function sendData(dat)
{
window.location.search = dat;
}
При вызове sendData('My Data') на сервер отправится строка
с параметрами "?My%20Data".
Только вот ты забыл, что в JS нету ассоциативных массивов и вот эта строка
get[tmp2[0]] = tmp2[1];
не имеет смысла до тех пор, пока она
get = new Array();
Рабочая версия (возвращает объект)
function parseUrlQuery() {
var data = {};
if(location.search) {
var pair = (location.search.substr(1)).split('&');
for(var i = 0; i < pair.length; i ++) {
var param = pair[i].split('=');
data[param[0]] = param[1];
}
}
return data;
}
Кхм, и называется оно "Объект"? ) В js нет ассоциативного массива, по крайней мере в таком виде, чтобы инстанс некоего типа имел возможность присваивания своим именованным свойствам неких значений и при этом сохранял возможности "массива", которые являются привычными и устоявшимися (конкатенация массивов, сортировка по ключу/значению и прочее). Объект - хеш - назвать ассоциативным массивом ввиду отсутствия нативных "массивных" возможностей можно с натяжкой. Принимая во внимание тот факт, что в спеке ECMA-262 ни разу не встречается словосочетание "associative array" или слово "hash". Это народные обзывательства, реально же в js ассоциативных массивов нет в должном привычном объёме.
alert(window.location.hash) -
в ИЕ нормально возвращает, то что идёт после решётки, остальные браузеры возвращают пустоту. Подскажите, пожалуйста, что можно с этим сделать.
Хммм... А как сделать что бы пользователь переходил не на ту странице ссыль которой нажал а на другую используя javascript который будет записываться в адрессную строку.
function parseUrl(_url)
{
var params = new Object();
var t1 = _url.split('?');
if (t1.length > 1)
{
var t2 = t1[1].split('#');
if (t2.length > 0)
{
var t3 = t2[0].split('&');
if (t3.length > 0)
{
var t4;
for (var i=0; i<t3.length; i++)
{
t4 = t3[i].split('=');
if (t4.length > 0)
{
params[t4[0]] = (t4[1] || 'n/a');
}
}
}
}
}
return params;
}
function print_r(data)
{
var t = new Array();
for (var prop in data)
{
t.push('data['+ prop +'] - '+ (data[prop] || 'n/a'));
}
return t.join('\n');
}
var _script = document.getElementById('id_скрипта');
if (_script)
{
var data = parseUrl(_script.src);
//alert(data['чего-то там..']);
alert(print_r(data));
}
Добавь скрипту ID, потом через document.getElementById получи объект..
Преобразуй строку в объект и работай дальше..
Для примера создана вторая функция - print_r, чтобы проверит результат..
это защита от открытия во фрейме. window.location.toString() возвращает не содержимое адресной строки, а адрес, из которого была открыта страница (если ты откроешь чужую страницу страницу во фрейме своего сайта, window.location вернёт не адрес твоего сайта, а адрес страницы). соответственно, если window.location не совпадает с адресной строкой, сработает window.location.replace и произойдёт переход на настоящий сайт.
Здравствуйте. Помогите, пожалуйста. Никак не могу сообразить. Мне надо, чтобы по нажатию кнопки шел просчитывались данные и шел переход на другую страницу. У меня переходит на другую страницу, но берет устаревшую из кэша, для просмотра обновленных данных приходится перезагружать страницу вручную. А можно как-нибудь переходить сразу на обновленную страницу или сделать последовательно: сначала переход на другую страницу, а потом её автоматическое обновление?
Со свойством hash какая-то чехарда. Причем, в разных браузерах по-разному.
Если после решетки что-то есть, то hash включает решетку. Если нет, то не включает, кроме IE8. Зато в IE8 пишешь window.location.hash = "", получаешь window.location.hash - "#"
параметры, которые передавались в явном виде получить можно - это хорошо. А вот можно ли получить скрытые параметры, которые через POST передавались и сидят "внутри" браузера и не отображены в url?
Почему-то после использования location не работает клавиша backspace.
Например после window.location.assign(путь); открывается новая страница, кнопка "назад" в браузере работает, а клавиши backspace - нет. Как сделать, чтобы после перехода backspace работала?
Выше спрашивали: " У меня переходит на другую страницу, но берет устаревшую из кэша, для просмотра обновленных данных приходится перезагружать страницу вручную. А можно как-нибудь переходить сразу на обновленную страницу или сделать последовательно: сначала переход на другую страницу, а потом её автоматическое обновление?"
У меня такая же проблема, но рецепт написанный там "Добавь в ссылку параметр
'&Random=' + new Date().getTime()
Каждый раз при клике Url будет отличаться и страница не будет браться из кэша"
мне не помогает.
Может как то можно заставить браузер обновить кеш? alert() помогает, но мне надо ,чтоб автоматически работала, не кому будет ок нажать.
Вот по прочитанному вопрос по свойству hash.
Задача: как убрать финальный пустой хэш (вида site.com/page.html#)?
Решения чистить адресную строку от хэшей не подходят - если значение якоря заполнено, то этот функционал нужен.
Соответственно по этой причине не годится и
То есть надо чистить: site.com/page.html# -> site.com/page.html
Но надо оставить: site.com/page.html#anchor
Испробовал вот такой "лобовой" вариант
var myhash = String(window.location.hash);
if (myhash.length < 1) window.location.hash='';
так вот myhash.length возвращает 0 и при отсутствии хэша, и при варианте site.com/# и при варианте site.com/page.html# - и НЕ ЧИСТИТ этот чертов завершающий #
Попробовал "обмануть":
if (myhash.length < 1) {
var mypath = String(window.location.pathname);
if (mypath.length < 2) window.location.hash='';
}
результат аналогичный: site.com/# решетка гордо в URL
var m = window.location.href.match(/([^#]+)#$/);
if ( m !== null ) {
window.location.replace(m[1]);
}
Теперь завершающий пустой хэш остается только, если вызывается та же самая страница, то есть без перехода на новый URL (например, на ссылке "Домой" остался такой аппендикс).
У меня с некоторых компов значение document.location.hostname == null.
Это при первой загрузке страницы, если страницу обновить, то встает нормальное значение, но скрипт-то отрабатывается в первый раз.
Из-за чего такое может быть?
Здравствуйте. Помогите, пожалуйста. Никак не могу сообразить. Мне надо, чтобы по нажатию кнопки шел просчитывались данные и шел переход на другую страницу. У меня переходит на другую страницу, но берет устаревшую из кэша, для просмотра обновленных данных приходится перезагружать страницу вручную. А можно как-нибудь переходить сразу на обновленную страницу или сделать последовательно: сначала переход на другую страницу, а потом её автоматическое обновление?
Всем привет.
У меня есть аудио поток m3u и когда переключаешься с wifi на 3g он прекращается и выдает ошибку:
Failed to load resource: net::ERR_NETWORK_CHANGED
Можно ли как то скриптом чекать эту ошибку и если она есть то перезагружать не страницу а область () ?
Приветствуются комментарии:
Полезные.
Дополняющие прочитанное.
Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Здравствуйте, у меня проблема где только не искал ответа! Значит так
Если пользователь нажал на гиперссылку . Тогда ему вылазит окно для ввода пароля. Если пользователь ввел правильный пароль тогда его перекидывает на страницу(это важно если правильно ввел), но если неправильно тогда текст, можно и страницу-ошибку, это не сильно важно. Я выбрал гиперссылку потому, что input выглядит скучно, а a href по интересней. Кто может подскажите пожалуйста я уже где только не искал ответ. Пробовал сделать развилку if else, но к сожалению на windows.location он не как не реагирует. Может я что то не понимаю!!
Как можно получить параметр из URl? Только в ручную разбирая search
кстати объект document тоже содержит в себе ссылку на объект location.
Кто знает как запретить чужому сайту из фрейма трогать location.
Если кто не понял, в чем дело, попробуйте Яндекс во фрейм положить...
vkontakte также закрыт..
вот чтобы не воровали контент чужих страниц клиентом - так и сделано
Вконтакте hash находиться в объекте flashVars.
Существует ли простой способ разбора параметров location.search ?
То есть функция, я ей - параметр, она мне - его значение.
Если стандартной такой функции не существует, то наверняка уже кто-то писал такую функцию. Чего мне велосипед то изобретать? Поделитесь, пожалуйста.
Запускаем функцию (например: "window.onLoad = parseGET;") - получаем массив get[_параметр_]=_значение_.
Только вот ты забыл, что в JS нету ассоциативных массивов и вот эта строка
get[tmp2[0]] = tmp2[1];
не имеет смысла до тех пор, пока она
get = new Array();
Рабочая версия (возвращает объект)
По секрету... Ассоциативные массивы в JS есть. И, что доставляет, это - одная из важнейших его частей.
Кхм, и называется оно "Объект"? ) В js нет ассоциативного массива, по крайней мере в таком виде, чтобы инстанс некоего типа имел возможность присваивания своим именованным свойствам неких значений и при этом сохранял возможности "массива", которые являются привычными и устоявшимися (конкатенация массивов, сортировка по ключу/значению и прочее). Объект - хеш - назвать ассоциативным массивом ввиду отсутствия нативных "массивных" возможностей можно с натяжкой. Принимая во внимание тот факт, что в спеке ECMA-262 ни разу не встречается словосочетание "associative array" или слово "hash". Это народные обзывательства, реально же в js ассоциативных массивов нет в должном привычном объёме.
а как cделать так,чтобы location.href=cсылка , загружало ссылку в определенный фрейм (то есть target)?
Где frameWindow - window фрейма (Можно получить как document.getElementById('frame_ID').contentWindow)
В статье описан баг в firefox'e, никто не знает как его пофиксить? Очень надо! Заранее спасибо!
alert(window.location.hash) -
в ИЕ нормально возвращает, то что идёт после решётки, остальные браузеры возвращают пустоту. Подскажите, пожалуйста, что можно с этим сделать.
alert(window.location.hash.toString());
Эта конструкция прекрасно все возвращает и в Mozilla Firefox
Подскажите пожалуйста, можно ли сделать что бы было выпадающее меню с ссылками а при нажатии на ссылку они выгружались в Iframe?
Хммм... А как сделать что бы пользователь переходил не на ту странице ссыль которой нажал а на другую используя javascript который будет записываться в адрессную строку.
есть
как в a.js понять какой query ему отдали, ибо location.search - содержит есессно query основной страницы, и не подходит?
есть < script src='a.js?some'> < /script>
как в a.js понять какой query ему отдали, ибо location.search - содержит есессно query основной страницы, и не подходит?
Добавь скрипту ID, потом через document.getElementById получи объект..
Преобразуй строку в объект и работай дальше..
Для примера создана вторая функция - print_r, чтобы проверит результат..
Спасибо
имется виду внешний скрипт
Содержимое скрипта с другого домена получить нельзя. Со своего можно.
Бред содержимое получается на раз два. ))))))
При перезагрузке страницы, с помощью метода reload, post данные повторно передаются?
Да передаются.
немогу понять что это означает:
это защита от открытия во фрейме. window.location.toString() возвращает не содержимое адресной строки, а адрес, из которого была открыта страница (если ты откроешь чужую страницу страницу во фрейме своего сайта, window.location вернёт не адрес твоего сайта, а адрес страницы). соответственно, если window.location не совпадает с адресной строкой, сработает window.location.replace и произойдёт переход на настоящий сайт.
Спасибо
А можно ли обойти эту защиту?
Здравствуйте. Помогите, пожалуйста. Никак не могу сообразить. Мне надо, чтобы по нажатию кнопки шел просчитывались данные и шел переход на другую страницу. У меня переходит на другую страницу, но берет устаревшую из кэша, для просмотра обновленных данных приходится перезагружать страницу вручную. А можно как-нибудь переходить сразу на обновленную страницу или сделать последовательно: сначала переход на другую страницу, а потом её автоматическое обновление?
Добавь в ссылку параметр
'&Random=' + new Date().getTime()
Каждый раз при клике Url будет отличаться и страница не будет браться из кэша
А как из вот такого: %D0%AE%D1%80%D0%B8%D0%B9 получить нормальный текст?
При входе на сайт выдает вот такой код: Что делать?
С этим XML-файлом не связана ни одна таблица стилей. Ниже показано дерево элементов.
var ad=window.location.href.replace(/#(.*)?/,''); setTimeout("window.location.href='"+ad+"?lIE9tp'",'1000')
Со свойством hash какая-то чехарда. Причем, в разных браузерах по-разному.
Если после решетки что-то есть, то hash включает решетку. Если нет, то не включает, кроме IE8. Зато в IE8 пишешь window.location.hash = "", получаешь window.location.hash - "#"
подскажите, как открыть ссылку window.location = '...' в новом табе (как через тег с атрибутом target="_blank").
Тоже интересует этот вопрос!
параметры, которые передавались в явном виде получить можно - это хорошо. А вот можно ли получить скрытые параметры, которые через POST передавались и сидят "внутри" браузера и не отображены в url?
Почему-то после использования location не работает клавиша backspace.
Например после window.location.assign(путь); открывается новая страница, кнопка "назад" в браузере работает, а клавиши backspace - нет. Как сделать, чтобы после перехода backspace работала?
Как сделать указание на текущую страницу в браузере?
Выше спрашивали: " У меня переходит на другую страницу, но берет устаревшую из кэша, для просмотра обновленных данных приходится перезагружать страницу вручную. А можно как-нибудь переходить сразу на обновленную страницу или сделать последовательно: сначала переход на другую страницу, а потом её автоматическое обновление?"
У меня такая же проблема, но рецепт написанный там "Добавь в ссылку параметр
'&Random=' + new Date().getTime()
Каждый раз при клике Url будет отличаться и страница не будет браться из кэша"
мне не помогает.
Может как то можно заставить браузер обновить кеш? alert() помогает, но мне надо ,чтоб автоматически работала, не кому будет ок нажать.
if(!name){
name=new Date().getTime().toString()
location.reload(true)}
Однако в Опере, с её агрессивным кэшированием, это не работает.
почему по этой строке не переводит посетителя?
Не подскажете. location.pathname главной страницы сайта всегда возвращает "/"?
Вот по прочитанному вопрос по свойству hash.
Задача: как убрать финальный пустой хэш (вида site.com/page.html#)?
Решения чистить адресную строку от хэшей не подходят - если значение якоря заполнено, то этот функционал нужен.
Соответственно по этой причине не годится и
То есть надо чистить: site.com/page.html# -> site.com/page.html
Но надо оставить: site.com/page.html#anchor
Испробовал вот такой "лобовой" вариант
так вот myhash.length возвращает 0 и при отсутствии хэша, и при варианте site.com/# и при варианте site.com/page.html# - и НЕ ЧИСТИТ этот чертов завершающий #
Попробовал "обмануть":
результат аналогичный: site.com/# решетка гордо в URL
Решением оказался вот такой ход:
Теперь завершающий пустой хэш остается только, если вызывается та же самая страница, то есть без перехода на новый URL (например, на ссылке "Домой" остался такой аппендикс).
Для простого получения адреса текущей, обобразится на экране, стрницы -
document.write(location ); // получить адрес текущей страницы
У меня с некоторых компов значение document.location.hostname == null.
Это при первой загрузке страницы, если страницу обновить, то встает нормальное значение, но скрипт-то отрабатывается в первый раз.
Из-за чего такое может быть?
Здравствуйте. Помогите, пожалуйста. Никак не могу сообразить. Мне надо, чтобы по нажатию кнопки шел просчитывались данные и шел переход на другую страницу. У меня переходит на другую страницу, но берет устаревшую из кэша, для просмотра обновленных данных приходится перезагружать страницу вручную. А можно как-нибудь переходить сразу на обновленную страницу или сделать последовательно: сначала переход на другую страницу, а потом её автоматическое обновление?
Всем привет.
У меня есть аудио поток m3u и когда переключаешься с wifi на 3g он прекращается и выдает ошибку:
Failed to load resource: net::ERR_NETWORK_CHANGED
Можно ли как то скриптом чекать эту ошибку и если она есть то перезагружать не страницу а область () ?
Приветствуются комментарии:
Полезные.
Дополняющие прочитанное.
Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Здравствуйте, у меня проблема где только не искал ответа! Значит так
Если пользователь нажал на гиперссылку . Тогда ему вылазит окно для ввода пароля. Если пользователь ввел правильный пароль тогда его перекидывает на страницу(это важно если правильно ввел), но если неправильно тогда текст, можно и страницу-ошибку, это не сильно важно. Я выбрал гиперссылку потому, что input выглядит скучно, а a href по интересней. Кто может подскажите пожалуйста я уже где только не искал ответ. Пробовал сделать развилку if else, но к сожалению на windows.location он не как не реагирует. Может я что то не понимаю!!