Значением этого свойства является объект типа 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".
Автор: Гость (не зарегистрирован), дата: 27 октября, 2009 - 16:12
Только вот ты забыл, что в 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 и произойдёт переход на настоящий сайт.
Здравствуйте. Помогите, пожалуйста. Никак не могу сообразить. Мне надо, чтобы по нажатию кнопки шел просчитывались данные и шел переход на другую страницу. У меня переходит на другую страницу, но берет устаревшую из кэша, для просмотра обновленных данных приходится перезагружать страницу вручную. А можно как-нибудь переходить сразу на обновленную страницу или сделать последовательно: сначала переход на другую страницу, а потом её автоматическое обновление?
Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены. Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Как можно получить параметр из URl? Только в ручную разбирая search
decodeURIComponent(location.search.substr(1)).split('&')А еще пробежаться по массиву, разбить его элементы по '=' и составить хеш. Будет вообще замечательно.
кстати объект document тоже содержит в себе ссылку на объект location.
Кто знает как запретить чужому сайту из фрейма трогать location.
Если кто не понял, в чем дело, попробуйте Яндекс во фрейм положить...
vkontakte также закрыт..
вот чтобы не воровали контент чужих страниц клиентом - так и сделано
Вконтакте hash находиться в объекте flashVars.
Существует ли простой способ разбора параметров location.search ?
То есть функция, я ей - параметр, она мне - его значение.
Если стандартной такой функции не существует, то наверняка уже кто-то писал такую функцию. Чего мне велосипед то изобретать? Поделитесь, пожалуйста.
function parseGET() { // Обработка GET-запросов var tmp = new Array(); // два вспомогательных var tmp2 = new Array(); // массива get = new Array(); var url = location.search; // строка GET запроса if(url != '') { tmp = (url.substr(1)).split('&'); // разделяем переменные for(var i=0; i < tmp.length; i++) { tmp2 = tmp[i].split('='); // массив param будет содержать get[tmp2[0]] = tmp2[1]; // пары ключ(имя переменной)->значение } } }Запускаем функцию (например: "window.onLoad = parseGET;") - получаем массив get[_параметр_]=_значение_.
Только вот ты забыл, что в 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 есть. И, что доставляет, это - одная из важнейших его частей.
Кхм, и называется оно "Объект"? ) В 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) -
в ИЕ нормально возвращает, то что идёт после решётки, остальные браузеры возвращают пустоту. Подскажите, пожалуйста, что можно с этим сделать.
Подскажите пожалуйста, можно ли сделать что бы было выпадающее меню с ссылками а при нажатии на ссылку они выгружались в Iframe?
Хммм... А как сделать что бы пользователь переходил не на ту странице ссыль которой нажал а на другую используя javascript который будет записываться в адрессную строку.
есть
как в a.js понять какой query ему отдали, ибо location.search - содержит есессно query основной страницы, и не подходит?
есть < script src='a.js?some'> < /script>
как в a.js понять какой query ему отдали, ибо location.search - содержит есессно query основной страницы, и не подходит?
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, чтобы проверит результат..
Спасибо
ну а как содержимое скрипта получить ? плачу 5баксов кто покажет ... jipik(a)bk.ru
имется виду внешний скрипт
Содержимое скрипта с другого домена получить нельзя. Со своего можно.
1
При перезагрузке страницы, с помощью метода 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 получить нормальный текст?
decodeURIComponent ?
Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.