Войти

Показать полную графическую версию : Как узнать адрес предыдущей страницы с помощью JS?


Vlad Drakula
16-05-2006, 11:35
Как узнать адрес предыдущей страницы с помощью JS?

ЗЫ
это нужно сделать в IE!

hasherfrog
16-05-2006, 11:47
document.referrer ?

Vlad Drakula
16-05-2006, 11:59
hasherfrog
попробовал... тусто...

alert(document.referrer);

dmitryst
16-05-2006, 12:08
Vlad Drakula
А с document.history не пробовали?

hasherfrog
16-05-2006, 12:13
parent.document.referrer
top.document.referrer
window.document.referrer
?

Vlad Drakula
16-05-2006, 12:20
dmitryst
А с document.history не пробовали?
ие не поддерживает нужные методы. в FF все бы работало... а нужно в ИЕ!

hasherfrog
16-05-2006, 12:26
http://support.microsoft.com/?kbid=178066

Vlad Drakula
16-05-2006, 12:37
hasherfrog
не в тему...
"Internet Explorer Does Not Send Referer Header in Unsecured Situations" это к серверу... а мене веть нужно на странице...

hasherfrog
16-05-2006, 12:46
Почему не в тему? :] Я-то не знаю, где Вы смотрите... :] MSIE-то какой? И сам метод referrer у document есть?

Vlad Drakula
16-05-2006, 12:53
hasherfrog
1) "MSIE-то какой?" - 6.*
2) "И сам метод referrer у document есть?" - не метод, а аттрибут...
3) "Почему не в тему?" - там речь идет о отсылке на сервер... а мне нужно это получить на клиенте...

hasherfrog
16-05-2006, 13:08
1) замечательно. только что проверил (не поленился перезагрузиться) - всё работает.
2) да, аттрибут. И он пустой, так выходит?
3) по-прежнему не понятно :]

Такое впечатление, что Вы открыли локальную страницу с диска и пытаетесь узнать у неё javascript:alert(document.referrer);
Так это и у FF пусто будет... ???

Или если URL руками вбить - тоже пусто будет.
Или если страница после какого-нибудь POST-запроса...
Или... эээ... чего там ещё бывает...

Я-то думал, Вы по ссылкам ходите, а у Вас referrer пустой...

hasherfrog
16-05-2006, 13:21
___

Конкретный пример: Нажмите "Навигация -> Новые сообщения".
У первого ("Подождите") окна referrer есть, у второго ("Результаты поиска") - уже не будет.
Если же на странице "Подождите" нажать "выполняется" - будет.
Я может, путаю чего-то, но ИМХО, страница с сайта MS тут как раз при делах :]


Или пост в данную тему - "итоговая" страница не имеет referrer :]

Vlad Drakula
16-05-2006, 13:33
hasherfrog
мне нужно та ссылка куда поведет window.history.go(-1)
если document.referrer выдает посто, а window.history.length > 0 то значит это плохо...

Prisoner
16-05-2006, 14:06
Судя по MSDN (объекты history, location) нет быстрых способов определения предыдущей страницы без перехода на нее. Вероятно, что в случае с IE придется таскать с собой на каждой странице в переменной адрес предыдущей.

hasherfrog
16-05-2006, 14:15
>> мне нужно та ссылка куда поведет window.history.go(-1)

Не получится. Никак. Объект history для некоторых методов/аттрибутов требует определённых привилегий: UniversalBrowserRead.
И вообще - это нереально с точки зрения безопасности. Кто мне мешает (если у меня есть доступ к хистори) вывалить её в форму и отправить дяде Билли?

>> если document.referrer выдает посто, а window.history.length > 0 то значит это плохо...

document в иерархии окно-документ обладает гораздо меньшими "правами".
Есть много чего, что недоступно ему. Так что значит, что это ничего не значит.

Подробно см. тут: http://www.mozilla.org/projects/security/components/signed-scripts.html
CTRL+F: function getHistory(i)


<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Developer Studio">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=windows-1251">
<TITLE>Document Title</TITLE>

<SCRIPT>
function getHistory(i) {
//Attempt to access privileged information
return history[i];
}
function getImmediateHistory() {
//Request privilege
netscape.security.PrivilegeManager.enablePrivilege(
"UniversalBrowserRead");

var s = "";
for (var l=0; l < history.length; l++) { s += getHistory(l); s += "\n"; }
return s;
}
</SCRIPT>

</HEAD>
<BODY >

<!-- Insert HTML here -->
<INPUT TYPE="button" onClick="alert(getImmediateHistory());" ID="b">

</BODY>
</HTML>


Попробуйте выполнить на мозилле FF.

Vlad Drakula
16-05-2006, 14:36
hasherfrog
Попробуйте выполнить на мозилле FF.
FF не интересует... нужно чтобы это работало в IE....

а в IE этот код не ртаботает...

hasherfrog
16-05-2006, 15:13
Вы не поняли :] "Попробуйте" - значит, "посмотрите, что будет".
А будет "Ахтунг!" - и я не думаю, что MSIE более доверчивый :]

Чтобы заработало в IE, достаточно убрать запрос привилегии.
Но значения массива хистори будут undefined.
Естественно.

Vlad Drakula, помните я тут http://forum.oszone.net/thread-61346.html пыхтел?
Мне как раз надо было знать, с какой [предыдущей] страницы бот (простейший javascript'ный) попал на данную страницу.
Это к замечанию Prisoner-а, видимо :]




© OSzone.net 2001-2012