【冷知识】获取网页所有的监听事件类型、方法。请认准getEventListeners

简介: 【冷知识】获取网页所有的监听事件类型、方法。请认准getEventListeners

获取事件列表

getEventListeners(window)//获取window绑定的所有监听事件列表
 
//----------------------------------------
 
getEventListeners(document.querySelector("选择器"))//获取指定DOM的所有监听事件列表

这里以CSDN为例,F12当前页面在Console选项卡输入 getEventListeners(window),回车执行代码后会输出以下对象:

{
    "load": [
        {"useCapture": false, "passive": false, "once": false, "type": "load"},
        {"useCapture": false, "passive": false, "once": false, "type": "load"},
        {"useCapture": false, "passive": false, "once": false, "type": "load"},
        {"useCapture": false, "passive": false, "once": false, "type": "load"},
        {"useCapture": false, "passive": false, "once": false, "type": "load"}
    ],
    "unload": [
        {"useCapture": false, "passive": false, "once": false, "type": "unload"},
        {"useCapture": false, "passive": false, "once": false, "type": "unload"},
        {"useCapture": false, "passive": false, "once": false, "type": "unload"},
        {"useCapture": false, "passive": false, "once": false, "type": "unload"},
        {"useCapture": false, "passive": false, "once": false, "type": "unload"}
    ],
    "beforeunload": [
        {"useCapture": false, "passive": false, "once": false, "type": "beforeunload"}
    ],
    "pagehide": [
        {"useCapture": false, "passive": false, "once": false, "type": "pagehide"},
        {"useCapture": false, "passive": false, "once": false, "type": "pagehide"}
    ],
    "error": [
        {"useCapture": false, "passive": false, "once": false, "type": "error"}
    ],
    "keydown": [
        {"useCapture": false, "passive": false, "once": false, "type": "keydown"}
    ],
    "resize": [
        {"useCapture": false, "passive": false, "once": false, "type": "resize"},
        {"useCapture": false, "passive": false, "once": false, "type": "resize"},
        {"useCapture": false, "passive": false, "once": false, "type": "resize"},
        {"useCapture": false, "passive": false, "once": false, "type": "resize"}
    ],
    "scroll": [
        {"useCapture": false, "passive": false, "once": false, "type": "scroll"},
        {"useCapture": false, "passive": false, "once": false, "type": "scroll"},
        {"useCapture": false, "passive": false, "once": false, "type": "scroll"},
        {"useCapture": false, "passive": false, "once": false, "type": "scroll"}
    ],
    "orientationchange": [
        {"useCapture": false, "passive": false, "once": false, "type": "orientationchange"}
    ],
    "pageshow": [
        {"useCapture": false, "passive": false, "once": false, "type": "pageshow"}
    ],
    "focus": [
        {"useCapture": false, "passive": false, "once": false, "type": "focus"}
    ],
    "blur": [
        {"useCapture": false, "passive": false, "once": false, "type": "blur"}
    ],
    "DOMContentLoaded": [
        {"useCapture": false, "passive": false, "once": false, "type": "DOMContentLoaded"},
        {"useCapture": false, "passive": false, "once": false, "type": "DOMContentLoaded"},
        {"useCapture": false, "passive": false, "once": false, "type": "DOMContentLoaded"}
    ],
    "keyup": [
        {"useCapture": false, "passive": false, "once": false, "type": "keyup"}]
};

获取事件绑定的方法源码

getEventListeners(window).事件名[0].listener;
 
//----------------------------------------
 
getEventListeners(document.querySelector("选择器")).事件名[0].listener;

触发事件绑定的方法

getEventListeners(window).事件名[0].listener();
 
//----------------------------------------
 
getEventListeners(document.querySelector("选择器")).事件名[0].listener();

移除对应绑定的事件监听(尤其是某些页面禁止了复制、切屏的时候屡试不爽,你懂得[坏笑])

var event=getEventListeners(window).事件名[0];
window.removeEventListener(event.type,event.listener);
 
//----------------------------------------
 
var dom=document.querySelector("选择器");
var event=getEventListeners(dom).事件名[0];
dom.removeEventListener(event.type,event.listener);

批量移除所有监听事件(硬核!)

var events=getEventListeners(window)
for (var eventName in events) {var eventItems = events[eventName];
    console.log(event);
    for (var i = 0, l = eventItems.length; i < l; i++) {
        var eventItem = eventItems[i];
        window.removeEventListener(eventItem.type,eventItem.listener);
    }
}
 
//----------------------------------------
 
var dom=document.querySelector("选择器")
var events=getEventListeners(dom)
for (var eventName in events) {var eventItems = events[eventName];
    console.log(event);
    for (var i = 0, l = eventItems.length; i < l; i++) {
        var eventItem = eventItems[i];
        dom.removeEventListener(eventItem.type,eventItem.listener);
    }
}

批量移除并打印指定DOM及其子元素所有监听方法代码(实用!)

var getAllEvents = function (sel) {
    var doms = [document.querySelector(sel)].concat([].slice.call(document.querySelectorAll(sel + " *")));//包括元素自己
    for (var i = 0, l = doms.length; i < l; i++) {
        var dom = doms[i];
        var events = getEventListeners(dom);
        for (var eventName in events) {
            var eventItems = events[eventName];
            for (var j = 0, len = eventItems.length; j < len; j++) {
                var eventItem = eventItems[j];
                dom.removeEventListener(eventItem.type, eventItem.listener);//移除事件
                console.log(`事件[${eventItem.type}]监听方法`, eventItem.listener);
            }
        }
    }
};
getAllEvents(".className");

打印效果


相关文章
|
Web App开发 域名解析 缓存
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
本文我们主要为大家介绍在 Ubuntu 20.04 上安装 Node.js 和 npm 的三种不同的方式。
165560 7
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
使用Excel随机分配固定人数到不同组里
本文介绍了如何使用Excel为学生随机分配学科或分组。通过插入=RAND()生成随机数,并结合RANK.AVG和ROUNDUP函数实现按固定人数分组,或用CHOOSE与RANDBETWEEN实现非固定分组。操作简单实用,适用于各类随机分配场景。
使用Excel随机分配固定人数到不同组里
|
10月前
|
前端开发 JavaScript API
HarmonyOS:ArkTS 显式动画 animateTo 自学指南
本文深入解析了 ArkTS 中的 `animateTo` 全局显式动画接口,帮助开发者掌握其使用方法。文章从接口概述、参数详解到使用注意事项,结合实际示例代码,全面展示了如何通过配置 `AnimateParam` 对象实现流畅的动画效果。内容涵盖属性动画、布局变化及组件转场等场景,并强调不同版本的支持特性。适合初学者系统学习,也供进阶开发者参考优化动画体验。希望本文能助你快速上手 `animateTo`!
578 7
|
JavaScript 前端开发 开发者
jQuery 下载与快速入门指南
jQuery 下载与快速入门指南
765 0
|
JSON PHP 数据格式
layui框架实战案例(1):layui组件table异步加载数据结合php后台动态翻页的解决方案
layui框架实战案例(1):layui组件table异步加载数据结合php后台动态翻页的解决方案
603 0
|
Prometheus 监控 安全
Java一分钟之-Spring Boot Actuator:健康检查与监控
【6月更文挑战第7天】Spring Boot Actuator 提供了丰富的监控和管理端点,如健康检查、性能监控。要启用Actuator,需添加依赖并配置暴露端点。健康检查可自定义,性能监控可通过Metrics结合Micrometer集成外部系统。安全配置很重要,可以使用Spring Security保护端点。日志和环境信息管理则可通过`/loggers`和`/env`端点。正确使用Actuator能提升应用的可观察性和维护性。
1155 1
|
JSON 测试技术 API
黑马商城 Elasticsearch从入门到部署 RestClient操作文档
这篇文章详细介绍了如何使用Java的RestHighLevelClient客户端与Elasticsearch进行文档操作,包括新增、查询、删除、修改文档以及批量导入文档的方法,并提供了相应的代码示例和操作步骤。
|
Android开发
Launcher中应用图标的显示流程
Launcher中应用图标的显示流程
207 1
element UI 中多行消息提示的实现(this.$message的换行)
element UI 中多行消息提示的实现(this.$message的换行)
888 0
|
监控 Java API
springcloud5-服务网关zuul及gateway
springcloud5-服务网关zuul及gateway
383 1
springcloud5-服务网关zuul及gateway