繁体   English   中英

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

[英]How to find where a custom event listener has been added?

在页面上的“友好”iframe 中运行了一段 3rd 方代码。 代码可能会或可能不会为它自己的自定义事件之一添加到外部页面上的任何元素或页面上某处的 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函数附加的,则您无法真正覆盖它们。 一种可能但超级凌乱的解决方案如下:

  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. 利润

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM