w666w
13.05.2004, 16:18
Необходимо запретить переходы со страницы при изменении скриптом объекта 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 - есть совсем другая переменная.
Извините, если криво объяснил, помогите пожалуйста.
Большое спасибо...
<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 - есть совсем другая переменная.
Извините, если криво объяснил, помогите пожалуйста.
Большое спасибо...