2013-05-17 3 views
4

Как я могу получить innerHTML элемента с щелчком на странице случайного веб-сайта, используя фейлет или инжектор скрипта? Например, нажав прямо над «Задать вопрос» на этой странице, вы вернете что-то, начиная с: <div class="nav mainnavs " style=""> <ul style=""> <li style="">.innerHTML элемента clicked

Я пробовал редактировать favelet от slayeroffice.com, чья первоначальная цель заключалась в удалении дочерних элементов выбранного элемента, но, похоже, это не работает.

javascript: 
var b = new Array(); 
var c= 1; 
var d; 
document.onkeydown = ck; 
el = document.getElementsByTagName('*'); 
for (i = 0; i < el.length; i++) 
    { 
     if (el[i].tagName.search(/(HTML|BODY)/i) == -1) 
     { 
      if (el[i].title) el[i].oldTitle = el[i].title; 
      el[i].title = el[i].innerHTML; 
      d=String(el[i].innerHTML); 
      el[i].onclick = function(e) 
      { 
       t = this; 
       if (window.event) e = window.event; 
       if ((t == e.target) || (window.event)) alert(d); 
       if (window.opera) e.stopPropagation(); 
       return false; 
      }; 
      el[i].onmouseover = function() 
      { 
       if (!c) return; 
       c = 0; 
       t = this; 
       b[t] = t.style.backgroundColor; 
       t.style.background = '#DADADA'; 
      }; 
      void(
      el[i].onmouseout = function() 
      { 
       t = this; 
       t.style.backgroundColor = b[t]; 
       c = 1; 
      }); 
     } 

    } 
function ck(e) 
{ 
    k = window.event ? window.event.keyCode : e.keyCode; 
    if (k == 27) 
    { 
     for (i = 0; i < el.length; i++) { 
      if (el[i].tagName.search(/(HTML|BODY)/i) == -1) 
      { 
       el[i].oldTitle ? el[i].title = el[i].oldTitle : el[i].removeAttribute('title'); 
       el[i].onclick = null; 
       el[i].onmouseover = null; 
       el[i].onmouseout = null; 
       el[i].style.backgroundColor = b[t]; 
      } 
     } 
    } 

} 

Есть ли решение?

ответ

7

Вы можете просто прикрепить событие к обработчику onclick документа. Нет необходимости перебирать каждый элемент на странице. Щелчки будут пузырек к нему ...

document.onclick = function(event) { 
    var target = event.target || event.srcElement; 

    alert (target.innerHTML); 
}; 

Однако я рекомендую использовать лучший метод для прикрепления обработчика событий, чем с «=», как она будет перекрывать любые ранее определенные события, которые могут иметь решающее значение для функционирования страницы.

Я использовал этот фрагмент кода, прежде чем для лучшего события прикрепляться без JQuery ...

var bindEvent = function(elem ,evt,cb) { 
     //see if the addEventListener function exists on the element 
     if (elem.addEventListener) { 
      elem.addEventListener(evt,cb,false); 
     //if addEventListener is not present, see if this is an IE browser 
     } else if (elem.attachEvent) { 
      //prefix the event type with "on" 
      elem.attachEvent('on' + evt, function(){ 
       /* use call to simulate addEventListener 
       * This will make sure the callback gets the element for "this" 
       * and will ensure the function's first argument is the event object 
       */ 
       cb.call(event.srcElement,event); 
      }); 
     } 
    } 

Вы просто позвоните ...

bindEvent(document,'click', function(event) { 
    var target = event.target || event.srcElement; 

    alert (target.innerHTML); 
}); 
+0

не все браузеры имеют «цель» – epascarello

+0

, в этом случае см. Редактирование .., которое должно обрабатывать IE –

+0

или вы могли бы просто сделать var 'target = event.target || event.srcElement; ' – epascarello

2

У вас возникнут проблемы с объемом i в цикле for.

i будет равен el.length при нажатии происходит.

Но зачем использовать переменную, когда вы можете прочитать его

изменение

if ((t == e.target) || (window.event)) alert(d); 

в

if ((t == e.target) || (window.event)) { 
    alert(this.innerHTML); 
} 

Также не вы должны быть проверки для srcElement на window.event?

+0

Спасибо, это именно то, что я имел в виду, когда Я пробовал разные модификации кода. К сожалению, он также показывает, что исходный код не подходит для этой задачи. –

Смежные вопросы