imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование > Для профессионалов
Опции темы
Старый 13.05.2004, 16:18     # 1
w666w
Guest
 
Сообщения: n/a

Arrow Запрет перехода по 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 - есть совсем другая переменная.

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

Большое спасибо...
 
Старый 13.05.2004, 18:15     # 2
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
А что мешает изменять location через ф-ию всегда?
RaZEr вне форума  
Старый 13.05.2004, 18:45     # 3
w666w
Guest
 
Сообщения: n/a

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

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

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

Спасибо...
 
Старый 13.05.2004, 18:49     # 4
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Для документа можно попробовать onpropertychange. Только для IE правда.
RaZEr вне форума  
Старый 15.05.2004, 14:58     # 5
w666w
Guest
 
Сообщения: n/a

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

Кто знает решение?
 
Старый 15.05.2004, 17:55     # 6
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Что мне интересно больше всего, - так это для чего все это нужно на практике?
RaZEr вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




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