Подмена addEventListener firefox.
Здравствуйте, мне необходимо подменить все вызовы функции addEventListener . Нужно это сделать из плагина firefox.
Пробовал так: var _funcS = HTMLAnchorElement.prototype.addEventListener; HTMLAnchorElement.prototype.addEventListener = function(event, funci, bubble) { alert(1); _funcS.call(this,event, funci, bubble); }; document.getElementById('link').addEventListener("click", evecatch, false);//не работает не выходит... Причём подмена любых других методов работает, например: var funcSetAttr = HTMLAnchorElement.prototype.setAttribute; HTMLAnchorElement.prototype.setAttribute = function(name, value) { alert(name); funcSetAttr.call(this,name,value); }; document.getElementById('link').setAttribute ("width", "100");//работает Этот метод вообще можно подменить? Если да, то подскажите как? Мне это нужно сделать, потому что я пытаюсь сделать 'чистую симуляцию' щелчка мышки initMouseEvent из под фаерфокс-плагина. Проблемма в том что initMouseEvent выдаёт не все аттрибуты объекта event, такими, которыми они должны быть на самом деле при щелчке, плюс фазы события идут неверно. Изменить я их никак не могу - 'not defined getter'. Либо есть какой-нибудь альтернативный способ сгенерировать событие с нужными мне параметрами? |
Похоже никто не знает. Может какието намёки, как полностью управлять объектом Event из фаерфокс-плагина? Ладно, придётся перекомпиливать фаерфокс.. Хотя в его исходниках чёрт ногу сломит)
|
А просто пройтись по всем ссылкам и перезаписать метод?
И еще клик по ссылке может отлавливаться не с самой ссылки, а например так: document.onclick = function (event) { event = event || window.event; var target = event.target || event.srcElement; if (target.nodeName.toUpperCase() == "A") { alert("Нажата ссылка"); return false; } }; |
Да, кстати так можно попробовать. Только есть пару факторов - там не только клик, там все мышиные события надо перехватывать это раз. А каким макаром предлагаешь, у каждой ссылки на событие создания делать чтото типа того?
link.addEventListener = function(event, funci, bubble) { /*мой код*/ HTMLAnchorElement.prototype.addEventListener.call(this,event, funci, bubble); }; link.onclick= function(event){ /*мой код*/ HTMLAnchorElement.prototype.onclick.call(this,event); }; причем моя функция в любом случае должна выполняться первее чем, функции, созданные из дочернего документа.... Идею простая - нужно сделать симуляцию клика, неотличимую от реального клика, из под плагина фаерфокс. Последовательность симулировал, координаты симулировал, движения мыши от координат прошлого клика симулировал, а вот с объектом Event туго... |
В принципе рекомпил фаерфокса - это пока лучший вариант из тех что я придумал... Только в коде там чтобы банальные вещи сделать, нужно много копаться. Всем спасибо =)
|
document.addEventListener( 'click', function( evt ){ исправляем evt }, true )
|
Цитата:
document.addEventListener( 'click', function( evt ){ evt=null;}, true); document.getElementById('link').addEventListener("click", evecatch, true); function evecatch(evt){ alert(evt); }; |
не заменить, а изменить..
|
Цитата:
|
Часовой пояс GMT +3, время: 06:30. |