HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 21.06.2008, 14:46
[Raz0r]
Members of Antichat - Level 5
Регистрация: 25.02.2007
Сообщений: 495
Провел на форуме:
3244717

Репутация: 1980
Отправить сообщение для [Raz0r] с помощью ICQ
По умолчанию

Как вариант для 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>
 
Ответить с цитированием

  #12  
Старый 21.06.2008, 19:06
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

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=0iAST.links.lengthi++)
        if(
AST.trgt == AST.links[i])
             
loadPage(AST.links[i].valueOf());

if(
e.preventDefault)
  
e.preventDefault();

e.returnValue false;

return  
false;

он отлично работает в опере, фф, сафари (для винды), но не работает в ие! орёт матерное слово и перебрасывает прямиком на блокнот

может проблема в том, что всё вынесено в отдельный скрипт?

ПС
Цитата:
Ааааа!
че? )))
 
Ответить с цитированием

  #13  
Старый 21.06.2008, 20:24
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

вот снова залил сорцы (6 кб)
http://up.giga.su/643686467/

я там создал функцию тест.
она по сути дублирует функцию loadPage.

вот что она должна делать:
- создать пустой див (ок)
- очистить контейнер, куда будет помещаться контент новой страницы (ок)
- аяксом подгрузить новый контент
- приаттачить его к контейнеру

если закоментить вызов моей самописной аякс-функции - то ссылки как и должно быть - не совершают перехода.
они чистят страницу, создают див, и отменяют переход по ссылке.

теперь осталось получить новые данные.

если раскомментировать строку - то ИЕ просто перейдёт по ссылке на текстовый файл. т.е. функция перестаёт работать.

Тем не менее в функции init() есть строки загружающие страницу по умолчанию.
они также используют loadPage(), ajax(), но у них всё работает нормально.
если поставить алерты - то видно, что аякс получает тело страницы.

в случае же с тест-функцией, которую я прилепил в качестве обработчика исключительно для ИЕ - аякс ниче не возвращает и до отмены перехода по ссылке видно вообще дело не доходит..

добьём эту шнягу! чуток осталось

я вот тут ещё писал:
http://forum.ixbt.com/topic.cgi?id=26:38394
но там не особо почерпнул пока
 
Ответить с цитированием

  #14  
Старый 21.06.2008, 22:42
astrologer
Постоянный
Регистрация: 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. Все рекомендации основаны на следующем правиле: переписывать код полностью нельзя.
 
Ответить с цитированием

  #15  
Старый 22.06.2008, 00:08
asser
Познающий
Регистрация: 25.01.2008
Сообщений: 31
Провел на форуме:
80719

Репутация: 7
По умолчанию

А может туда какую-нить маленькую админку добавить стоит?!Руками конечно не впадлу, но тем не менее))
 
Ответить с цитированием

  #16  
Старый 22.06.2008, 08:08
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

ур-ра-а!!
вот где оказываеца была зарыта эта побитая дождями сцобака!
теперь везде работает стабильно.

astrologer
жму руку! спасибо

Цитата:
P.S. Все рекомендации основаны на следующем правиле: переписывать код полностью нельзя.
а вот это не понял. поясни?

asser
какую админку? чтобы изменять меню? для этого нужны скрипты на сервере.
а это уже совершенно другая история..
 
Ответить с цитированием

  #17  
Старый 22.06.2008, 08:13
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

Так. осталось выяснить, чем неугоден следующий код?
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)
 


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




ANTICHAT.XYZ