imho.ws |
![]() |
![]() |
![]() |
# 1 |
Guest
Сообщения: n/a
|
![]()
Необходимо запретить переходы со страницы при изменении скриптом объекта 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 - есть совсем другая переменная. Извините, если криво объяснил, помогите пожалуйста. Большое спасибо... |
![]() |
# 3 |
Guest
Сообщения: n/a
|
Дело в том, что этот скрипт является "инъекцией" во все загружаемые страницы в браузер. Попытаюсь объяснить подробнее:
В браузер загружаются ЛЮБЫЕ страницы с любых web-ресурсов. Их содержимое неизвестно заранее. Но есть потребность запретить ВСЕМ ЗАГРУЖАЕМЫМ страницам переходить по дерективе "document.location.href = ". Поэтому нужен некий скрипт, который будет вливаться первым в каждую страницу, а потом само содержание нового документа. Естественно невозможно заранее узнать, какое содержание будет у загружаемой страницы, и как в ней выглядят скрипты. Поэтому необходимо перекрыть ВСЕ возможные варианты (что я попытался продемонстрировать в своем примере - множество вариантов - результат один). Подскажите, как отловить все возможные варианты. Особенно "document.location.href = " Спасибо... |