移除addEventListener匿名函数
详见:http://pea3nut.blog/e224(怎么感觉他这网站要挂。。。没关系,加了webarchive存档了)
分两步:在最前面(油猴里是添加`// @run-at document-start`尽可能注入)
```js
(()=>{
const addEventListener = Element.prototype.addEventListener;
Element.prototype.addEventListener = function() {
if(!this.eventList) this.eventList={};
if(!this.eventList]) this.eventList]=[];
this.eventList].push(arguments);
addEventListener.apply(this,arguments);
};
})();
```
哦,闭包是我加的。。。不要污染window嘛。。。
添加完就可以直接在适当的时候remove了,比如我移除所有点击事件的代码:
```js
const dom = document.querySelector('.useThis');
dom?.eventList?.click?.map((a) => dom.removeEventListener('click',a));
```
当然理论上可以继续封装。。。
没必要 webarchive存档是啥 不太严谨,addEventListener可以有第三个参数的,移除的话最好保证所有参数都相同,干脆这么搞:
const el = this;
el.eventList].push({
event: arguments,
remove: () => el.removeEventListener.apply(el, arguments)
});
https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/removeEventListener cxxjackie 发表于 2022-12-19 22:32
不太严谨,addEventListener可以有第三个参数的,移除的话最好保证所有参数都相同,干脆这么搞:
https:// ...
cxxjackie大佬快点封装个库然后让我来发
![](https://bbs.tampermonkey.net.cn/data/attachment/forum/202212/03/231334r2qs20eq077e2777.gif)
涛之雨 发表于 2022-12-19 23:55
cxxjackie大佬快点封装个库然后让我来发
![](https://bbs.tampermonkey.net.cn/data/attachment/foru ...
哈哈,要不你就封这个吧,顺便把addEventListener这又臭又长的名字改短点:
const XX = new XXX(); // 劫持addEventListener
console.log(XX.eventList); // 列举所有绑定事件
const event = XX.add(el, 'click', listener); // addEventListener简写
event.remove(); // 快速移除
页:
[1]