有一个第三方代码在"友好"页面上的iframe。代码可能已经或可能没有为其中一个自定义事件添加一个侦听器到外部页面上的任何元素,或者在页面某处的某个iframe中(在其窗口,文档或dom元素上) 。
我知道自定义事件的名称,但是如何判断添加侦听器的位置?
答案 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
函数附加事件处理程序,则无法真正覆盖它们。一个可能的超级凌乱解决方案如下:
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
的所有出现