如何查找已添加自定义事件侦听器的位置
How to find where a custom event listener has been added?
页面上有一段第三方代码在"友好"的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
函数附加事件处理程序,则不能真正覆盖它们。一个可能的超级混乱的解决方案是:
- 在
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; } });
- 在您喜爱的文本编辑器中打开库的脚本,并将所有出现的
.onclick
替换为.ONMYCLICK
- 利润
相关文章:
- 如何在javascript中创建自定义事件
- 如何在d3.js中自定义事件侦听器
- jquery自定义事件混淆
- jquery可从自定义事件中排序
- 向ASP控件添加自定义事件
- 使用自定义数据属性或将数据绑定到处理程序来处理事件
- 在放置目标时,输入并离开自定义事件
- 处理角度自定义指令中的onReady事件
- 如何将自定义参数传递到FullCalendar事件提要
- AngularJS自定义过滤器未触发点击事件
- 加载自定义磁贴后的谷歌地图事件
- Chris Coyer中call()的用法'的自定义事件示例
- 在 Chrome 扩展程序中创建自定义事件的最惯用方式
- 如何获取 jQuery 以触发本机自定义事件处理程序
- 允许在自定义事件上“查找使用实例”的 IDE
- 如何禁用自定义复选框的单击事件
- 如何将 DOM 元素绑定到自定义 $.touchpress 事件
- 如何从视图中触发事件(自定义事件)并在 Ext JS 的控制器中处理它们
- 高图表-覆盖图例点击和悬停事件自定义逻辑
- 必应地图点击事件自定义信息框html