上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

移除addEventListener匿名函数

[复制链接]
  • TA的每日心情
    慵懒
    2023-11-28 11:18
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    16

    主题

    153

    回帖

    313

    积分

    荣誉开发者

    积分
    313

    荣誉开发者油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-12-19 21:21:31 | 显示全部楼层 | 阅读模式

    详见:http://pea3nut.blog/e224
    (怎么感觉他这网站要挂。。。没关系,加了webarchive存档了)

    分两步:在最前面(油猴里是添加// @run-at document-start尽可能注入)

    (()=>{
        const addEventListener = Element.prototype.addEventListener;
        Element.prototype.addEventListener = function() {
            if(!this.eventList) this.eventList={};
            if(!this.eventList[arguments[0]]) this.eventList[arguments[0]]=[];
            this.eventList[arguments[0]].push(arguments[1]);
            addEventListener.apply(this,arguments);
        };
    })();

    哦,闭包是我加的。。。不要污染window嘛。。。

    添加完就可以直接在适当的时候remove了,比如我移除所有点击事件的代码:

    const dom = document.querySelector('.useThis');
    dom?.eventList?.click?.map((a) => dom.removeEventListener('click',a));

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

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    633

    主题

    5173

    回帖

    6052

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6052

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2022-12-19 21:35:37 | 显示全部楼层
    webarchive存档是啥
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    860

    回帖

    1359

    积分

    荣誉开发者

    积分
    1359

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-12-19 22:32:34 | 显示全部楼层
    不太严谨,addEventListener可以有第三个参数的,移除的话最好保证所有参数都相同,干脆这么搞:
    1. const el = this;
    2. el.eventList[arguments[0]].push({
    3.     event: arguments[1],
    4.     remove: () => el.removeEventListener.apply(el, arguments)
    5. });
    复制代码

    https://developer.mozilla.org/zh ... removeEventListener
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-11-28 11:18
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    16

    主题

    153

    回帖

    313

    积分

    荣誉开发者

    积分
    313

    荣誉开发者油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-12-19 23:55:30 | 显示全部楼层

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

    不太严谨,addEventListener可以有第三个参数的,移除的话最好保证所有参数都相同,干脆这么搞:

    https:// ...

    cxxjackie大佬快点封装个库然后让我来发

    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    860

    回帖

    1359

    积分

    荣誉开发者

    积分
    1359

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-12-20 20:45:25 | 显示全部楼层
    涛之雨 发表于 2022-12-19 23:55
    [md]cxxjackie大佬快点封装个库然后让我来发
    ![](https://bbs.tampermonkey.net.cn/data/attachment/foru ...

    哈哈,要不你就封这个吧,顺便把addEventListener这又臭又长的名字改短点:
    1. const XX = new XXX(); // 劫持addEventListener
    2. console.log(XX.eventList); // 列举所有绑定事件
    3. const event = XX.add(el, 'click', listener); // addEventListener简写
    4. event.remove(); // 快速移除
    复制代码
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表