обнаружить клик по ссылке в Firefox - PullRequest
2 голосов
/ 13 января 2012

Я хочу определить в своем расширении Firefox, была ли нажата ссылка. Пока что для этого я добавляю прослушиватель события click в окно

  window.addEventListener("click", function(event) { handleWindowClick(event); }, false);

  ...

  handleWindowClick : function(event)  {
    if ("event.target is a link") {
      // do something
    }
  };

Для некоторых ссылок event.target - это просто URL. Однако для некоторых ссылок я получаю, например, HTMLSpanElement как event.target. Я на правильном пути, чтобы ловить ссылки или есть другие способы? Если это работает таким образом, как я могу обеспечить успешную проверку, если event.targer является ссылкой?

Ответы [ 4 ]

2 голосов
/ 13 января 2012

Вы добавляете прослушиватель событий в главное окно, которое регистрирует любой щелчок.URL, с которым у вас возникли проблемы, должен быть заключен в тег <span>.Вам нужно делегирование события

1 голос
/ 13 января 2012

проверьте это, я надеюсь, это то, что вы ищете.

window.addEventListener("click", function(event) {
    handleWindowClick(event);
}, false);

function handleWindowClick(event){
   var origEl = event.target || event.srcElement;
    if(origEl.tagName === 'A')
       alert("anchor link is clicked");
    else if(origEl.parentNode.tagName === 'A')
         alert("clicked inside anchor");
    else if(origEl.tagName === 'SPAN')
        alert("span  is clicked");
}

скрипка: http://jsfiddle.net/5zXkN/3/

1 голос
/ 13 января 2012

Почему бы просто не поместить прослушиватель события click в привязки (<a>)?

var hrefs = document.getElementsByTagName('a');

for (i = 0; i < hrefs.length; i++) {
    hrefs[i].addEventListener(...)
    ...
}

или в jQuery :

$('a').click(function () {
    ...
});
0 голосов
/ 14 января 2012

Я расширил ответ dku.rajkumar для поддержки произвольных конструкций внутри тегов "A".Я просто иду вверх по дереву, пока не найду «А» или пока не нахожусь в корне (поэтому в этом случае ссылка не нажата).Похоже, сделать трюк.Спасибо всем за помощь!

 window.addEventListener("click", function(event) { handleWindowClick(event); }, false);
 ...

 isLink : function(element) {
   if(element.tagName === 'A')
     return true;
   else 
     if (element.parentNode) 
       return this.isLink(element.parentNode)
     else
       return false;
 },

 handleWindowClick : function(event) {
   var element = event.target || event.srcElement;
   var isLink = this.isLink(element);
   if (isLink) 
     dump("A link has been clicked.\n");
 },
...