ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

21.06.2008, 14:46
|
|
Members of Antichat - Level 5
Регистрация: 25.02.2007
Сообщений: 495
Провел на форуме: 3244717
Репутация:
1980
|
|
Как вариант для attachEvent и addEventListener:
Код:
<a id=aid href=#>Click me!</a>
<script>
Array.prototype.append = function(obj, nodup) {
if(!(nodup && this.contains(obj))) {
this[this.length] = obj;
}
}
EventRouter = function(el, eventType) {
this.lsnrs = new Array();
this.el = el;
el.eventRouter = this;
el[eventType] = EventRouter.callback;
}
EventRouter.prototype.addListener = function(lsnr) {
this.lsnrs.append(lsnr);
}
EventRouter.prototype.notify = function(e) {
var lsnrs = this.lsnrs;
for(var i=0; i < lsnrs.length; i++) {
var lsnr=lsnrs[i];
lsnr.call(this, e);
}
}
EventRouter.callback = function(event) {
var e = event || window.event;
var router = this.eventRouter;
router.notify(e);
}
var aid = document.getElementById("aid");
var ev = new EventRouter(aid, "onclick");
ev.addListener(function(){alert("Click!");});
</script>
|
|
|

21.06.2008, 19:06
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
astrologer
событие исправил на onclick, спасибо
третий параметр уже убрал
аттачевент уже переименовал
ща имеем такой код:
PHP код:
if ((navigator.userAgent.indexOf('MSIE') != -1)
&& (navigator.userAgent.indexOf('Win') != -1))
AST.menuId.attachEvent('onclick', addEvent);
else
AST.menuId.addEventListener('click', function(e){addEvent(e)}, false);
PHP код:
function addEvent(e){
alert('ХУЙ');
AST.trgt = (e.target || e.srcElement);
for(i=0; i< AST.links.length; i++)
if(AST.trgt == AST.links[i])
loadPage(AST.links[i].valueOf());
if(e.preventDefault)
e.preventDefault();
e.returnValue = false;
return false;
}
он отлично работает в опере, фф, сафари (для винды), но не работает в ие! орёт матерное слово и перебрасывает прямиком на блокнот
может проблема в том, что всё вынесено в отдельный скрипт?
ПС
че? )))
|
|
|

21.06.2008, 20:24
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
вот снова залил сорцы (6 кб)
http://up.giga.su/643686467/
я там создал функцию тест.
она по сути дублирует функцию loadPage.
вот что она должна делать:
- создать пустой див (ок)
- очистить контейнер, куда будет помещаться контент новой страницы (ок)
- аяксом подгрузить новый контент
- приаттачить его к контейнеру
если закоментить вызов моей самописной аякс-функции - то ссылки как и должно быть - не совершают перехода.
они чистят страницу, создают див, и отменяют переход по ссылке.
теперь осталось получить новые данные.
если раскомментировать строку - то ИЕ просто перейдёт по ссылке на текстовый файл. т.е. функция перестаёт работать.
Тем не менее в функции init() есть строки загружающие страницу по умолчанию.
они также используют loadPage(), ajax(), но у них всё работает нормально.
если поставить алерты - то видно, что аякс получает тело страницы.
в случае же с тест-функцией, которую я прилепил в качестве обработчика исключительно для ИЕ - аякс ниче не возвращает и до отмены перехода по ссылке видно вообще дело не доходит..
добьём эту шнягу! чуток осталось
я вот тут ещё писал:
http://forum.ixbt.com/topic.cgi?id=26:38394
но там не особо почерпнул пока
|
|
|

21.06.2008, 22:42
|
|
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме: 3069349
Репутация:
808
|
|
Для начала:
Код:
function(msg){ alert(msg) } // это то же самое, что и просто alert
Далее. Заменяем это:
Код:
// ajaxTest("GET", e.srcElement.valueOf(), function(msg){ alert(msg) });
на это:
Код:
if(e.srcElement.href) ajax("GET", e.srcElement.href, alert);
Условие необходимо, поскольку объект, по которому щёлкнули, может быть любым из блока menu и самим menu в том числе. Вторым параметром функции, в принципе, можно передать и саму ссылку ( [ HTMLAnchorElement ] ).
А теперь немного уличной магии. В коде функции ajax:
Код:
function ajax(method, url, userFunc) {
window.xmlHttp.onreadystatechange=function() {
if(window.xmlHttp.readyState==4)
userFunc(window.xmlHttp.responseText);
}
window.xmlHttp.open(method,url,true);
window.xmlHttp.send(null);
}
нужно поменять местами определение [ object XMLHttpRequest ].onreadystatechange и вызов метода open()
P.S. Все рекомендации основаны на следующем правиле: переписывать код полностью нельзя.
|
|
|

22.06.2008, 00:08
|
|
Познающий
Регистрация: 25.01.2008
Сообщений: 31
Провел на форуме: 80719
Репутация:
7
|
|
А может туда какую-нить маленькую админку добавить стоит?!Руками конечно не впадлу, но тем не менее))
|
|
|

22.06.2008, 08:08
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
ур-ра-а!!
вот где оказываеца была зарыта эта побитая дождями сцобака!
теперь везде работает стабильно.
astrologer
жму руку! спасибо
P.S. Все рекомендации основаны на следующем правиле: переписывать код полностью нельзя.
а вот это не понял. поясни?
asser
какую админку? чтобы изменять меню? для этого нужны скрипты на сервере.
а это уже совершенно другая история..
|
|
|

22.06.2008, 08:13
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
Так. осталось выяснить, чем неугоден следующий код?
PHP код:
// new XHR
try {window.xmlHttp=new XMLHttpRequest();}
catch (e){ try{window.xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}
catch (e){ try{window.xmlHttp=new ActiveXObject("MSXML2.XMLHTTP");}
catch (e){ try{window.xmlHttp=new ActiveXObject("MSXML2.XMLHTTP.3.0");}
catch (e){ try{window.xmlHttp=new ActiveXObject("MSXML2.XMLHTTP.4.0");}
catch (e){ try{window.xmlHttp=new ActiveXObject("MSXML2.XMLHTTP.5.0");}
catch (e){return false;}}}}}}
его можно как-то улучшить?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|