重新绑定onclick、on*事件监听器进行调试
Re-bind onclick, on* event listeners for debugging
我想 monkeypatch 事件侦听器注册。
我发现 this answer 展示了如何为 addEventListener
:
const nativeEventListener = EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener = function(...args) {
if (this.matches('div') && args[0] === 'click') {
console.log('listener is being added to a div');
debugger;
}
nativeEventListener.apply(this, args);
}
// then, when an event listener is added, you'll be able to intercept the call and debug it:
document.querySelector('div').addEventListener('click', () => {
console.log('clicked');
});
但这不会涵盖 onclick
、onkeydown
等作业。
我不知道如何为那些人做同样的事情,因为
const nativeOnClick = HTMLElement.prototype.onclick;
抛出类型错误
TypeError: 'get onclick' called on an object that does not implement interface HTMLElement.
现在我想知道是否有一种特殊的方法来检索 具体地 setter 和 getter for onclick
等,但是到目前为止,我的 google 搜索没有成功。
您可以通过以下方式获得原始 setter 函数:
const originalSetter = Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'onchange').set;
如果你想重新定义一个属性,你应该看看使用Object.defineProperty()
。
我想 monkeypatch 事件侦听器注册。
我发现 this answer 展示了如何为 addEventListener
:
const nativeEventListener = EventTarget.prototype.addEventListener; EventTarget.prototype.addEventListener = function(...args) { if (this.matches('div') && args[0] === 'click') { console.log('listener is being added to a div'); debugger; } nativeEventListener.apply(this, args); } // then, when an event listener is added, you'll be able to intercept the call and debug it: document.querySelector('div').addEventListener('click', () => { console.log('clicked'); });
但这不会涵盖 onclick
、onkeydown
等作业。
我不知道如何为那些人做同样的事情,因为
const nativeOnClick = HTMLElement.prototype.onclick;
抛出类型错误
TypeError: 'get onclick' called on an object that does not implement interface HTMLElement.
现在我想知道是否有一种特殊的方法来检索 具体地 setter 和 getter for onclick
等,但是到目前为止,我的 google 搜索没有成功。
您可以通过以下方式获得原始 setter 函数:
const originalSetter = Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'onchange').set;
如果你想重新定义一个属性,你应该看看使用Object.defineProperty()
。