IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Для профессионалов (http://www.imho.ws/forumdisplay.php?f=91)
-   -   Запрет перехода по document.location.href = ... (http://www.imho.ws/showthread.php?t=58607)

w666w 13.05.2004 16:18

Запрет перехода по document.location.href = ...
 
Необходимо запретить переходы со страницы при изменении скриптом объекта location. Более того, необходимо отловить, куда была попытка перейти, но НЕ ПЕРЕХОДИТЬ. Я не спец в JS (мне более близки Perl, PHP или Delphi), поэтому обращаюсь к Вам за помощью. Что мне удалось сделать:

<html>
<div id="mydiv">@</div>

<script>
function m(){
this.replace = _r;
}
var location = new m;

function _r(a){
mydiv.innerText = mydiv.innerText + '@' + a;
}

function location.replace(a){
mydiv.innerText = mydiv.innerText + '@' + a;
}

function location.assign(a){
mydiv.innerText = mydiv.innerText + '@' + a;
}
</script>

<script>

// ловимые
location.replace('location.replace');
document.location.replace('document.location.replace');
window.location.replace('window.location.replace');
document.location.assign('document.location.assign');

// не ловимые, но не вредящие

location = 'http://www.ru';
location.href = 'location.href';
top.location = 'http://www.ru';


// не ловимые и вредящие

// document.location.href = 'location.href';
</script>

<body>
</body>
</html>

Посмотрите, что происходит при просмотре этой странице в IE, поймете, в чем дело.

Первая проблема - как перехватить адрес страницы для перехода при непосредственном присвоении (location.href = ), так как гасить их я смог, но отловить никак.

Вторая и самая важная проблема - как запретить переход при разблокировке строки:

// document.location.href = 'location.href';

Тут вообще я ничего не могу сделать, так как window.location в моем примере есть моя переменная, а вот document.location - есть совсем другая переменная.

Извините, если криво объяснил, помогите пожалуйста.

Большое спасибо...

RaZEr 13.05.2004 18:15

А что мешает изменять location через ф-ию всегда?

w666w 13.05.2004 18:45

Дело в том, что этот скрипт является "инъекцией" во все загружаемые страницы в браузер. Попытаюсь объяснить подробнее:

В браузер загружаются ЛЮБЫЕ страницы с любых web-ресурсов. Их содержимое неизвестно заранее. Но есть потребность запретить ВСЕМ ЗАГРУЖАЕМЫМ страницам переходить по дерективе "document.location.href = ". Поэтому нужен некий скрипт, который будет вливаться первым в каждую страницу, а потом само содержание нового документа. Естественно невозможно заранее узнать, какое содержание будет у загружаемой страницы, и как в ней выглядят скрипты. Поэтому необходимо перекрыть ВСЕ возможные варианты (что я попытался продемонстрировать в своем примере - множество вариантов - результат один).

Подскажите, как отловить все возможные варианты. Особенно "document.location.href = "

Спасибо...

RaZEr 13.05.2004 18:49

Для документа можно попробовать onpropertychange. Только для IE правда.

w666w 15.05.2004 14:58

Не смог я прикрутить onPropertyChange к изменению свойства location. Более того, даже создавая собственный конструктор класса, я не смог перехватить никакими методами изменение его свойств.

Кто знает решение?

RaZEr 15.05.2004 17:55

Что мне интересно больше всего, - так это для чего все это нужно на практике?


Часовой пояс GMT +4, время: 15:53.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.