涛之雨 发表于 2022-12-19 21:21:31

移除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));
```

当然理论上可以继续封装。。。
没必要

李恒道 发表于 2022-12-19 21:35:37

webarchive存档是啥

cxxjackie 发表于 2022-12-19 22:32:34

不太严谨,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

涛之雨 发表于 2022-12-19 23:55:30

cxxjackie 发表于 2022-12-19 22:32
不太严谨,addEventListener可以有第三个参数的,移除的话最好保证所有参数都相同,干脆这么搞:

https:// ...

cxxjackie大佬快点封装个库然后让我来发
![](https://bbs.tampermonkey.net.cn/data/attachment/forum/202212/03/231334r2qs20eq077e2777.gif)

cxxjackie 发表于 2022-12-20 20:45:25

涛之雨 发表于 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]
查看完整版本: 移除addEventListener匿名函数