如何找到添加自定义事件侦听器的位置?

时间:2015-02-17 16:47:21

标签: javascript events dom javascript-events custom-events

有一个第三方代码在"友好"页面上的iframe。代码可能已经或可能没有为其中一个自定义事件添加一个侦听器到外部页面上的任何元素,或者在页面某处的某个iframe中(在其窗口,文档或dom元素上) 。

我知道自定义事件的名称,但是如何判断添加侦听器的位置?

1 个答案:

答案 0 :(得分: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
  3. 替换.ONMYCLICK的所有出现
  4. ???
  5. 利润