javascript - 如何查找添加了自定义事件监听器的位置?

标签 javascript dom events dom-events

有一段第三方代码在页面上的“友好”iframe 中运行。该代码可能会或可能不会将其自己的自定义事件之一的监听器添加到外部页面上的任何元素,或页面上某处的 iframe 之一(在其窗口、文档或 dom 元素上)。

我知道自定义事件的名称,但如何知道监听器已添加到何处?

最佳答案

这里有一个选项 - 覆盖标准实现:

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 函数附加事件处理程序,则您无法真正覆盖它们。一种可能但 super 困惑的解决方案如下:

  1. Node.prototype 上定义一个新属性。 Object.defineProperty(Node.prototype, "ONMYCLICK", function () { 获取:函数(){返回null; }, 设置:函数(处理程序){ console.log("嘿,已附加处理程序!"); this.onclick = 处理程序; } });
  2. 在您喜欢的文本编辑器中打开库的脚本,并将所有出现的 .onclick 替换为 .ONMYCLICK
  3. ???
  4. 利润

关于javascript - 如何查找添加了自定义事件监听器的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28566559/

相关文章:

javascript - 使用 chrome 的单个用户不会出现导航菜单

javascript - 在 Angularjs 的多个浏览器选项卡中打开多个 View

javascript - 使用 jquery 发布数据时没有为此对象定义无参数构造函数

javascript - 如何将常量数组与用户输入数组相乘?

css - 如果有必要,嵌套的 id 是否可以——性能下降或其他?

python - Wxpython,如何使用给定的按键代码创建wx.KeyEvent?

jQuery - div 上的 keydown() 在 Firefox 中不起作用

javascript - 将链接添加到 D3 生成的表

javascript - onclick 处理程序不会触发使用 document.createElement 创建的复选框

html - Firefox 和 Chrome 中未触发表 onkeyup 事件