2015-02-17 5 views
0

Существует сторонняя часть кода, работающая в «дружественном» iframe на странице. Код может или не может добавить слушателя для одного из своих собственных событий к любому элементу на внешней странице или в одном из iframe где-то на странице (либо в их окнах, и в документах, либо в элементах dom).Как найти, где был добавлен пользовательский прослушиватель событий?

Я знаю имя настраиваемого события, но как я могу определить, где был добавлен слушатель?

+0

Заканчивать IFrame Песочница http://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/ – Deepak

+0

Почему вы должны знать _where_ он добавил? – Halcyon

+0

Не уверен, что это возможно только из javascript, но вы можете использовать инструменты Chrome. Осмотрите элемент, который, как вы подозреваете, подключен к прослушивателю событий, и найдите вкладку «Слушатели событий» рядом со вкладкой «Стили». –

ответ

2

Вот один вариант - переопределить стандартную реализацию:

var addEventListenerImplementation = Node.prototype.addEventListener; 
 

 
Node.prototype.addEventListener = function (event, callback) { 
 
    alert("Hey, someone attached an event handler to me"); 
 
    addEventListenerImplementation.call(this, event, callback); 
 
}; 
 

 
document.getElementById("div").addEventListener("click", function() { 
 
    alert("clicked"); 
 
});
div { 
 
    background: red; 
 
    width: 300px; 
 
    height: 300px; 
 
}
<div id="div"/>

Это должно работать в большинстве случаев, но, к сожалению, addEventListener не единственный способ прикрепить события, так что вы, возможно, потребуется также переопределить Event.prototype.observe. Наконец, если обработчик события подключен с помощью element.onclick или любой другой функции onevent, вы не можете их переопределить. Одним возможным возможным решением может быть следующее:

  1. Задать вопрос об объекте недвижимости Node.prototype. Object.defineProperty(Node.prototype, "ONMYCLICK", function() { get: function() { return null; }, set: function (handler) { console.log("Hey, a handler was attached!"); this.onclick = handler; } });
  2. Открыть скрипт библиотеки в вашем любимом текстовом редакторе и заменить все вхождения .onclick с .ONMYCLICK
  3. ???
  4. Profit