Подмена 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, время: 10:51. |