在Chrome的开发工具中,有一个漂亮的界面,您可以在其中看到附加到给定DOM元素的所有事件侦听器,并根据需要删除其中的任何一个。这是屏幕截图(为强调起见添加了箭头):
我想编写一个Chrome扩展程序,该程序会自动从任何网页上删除事件监听器(我正在尝试编写一个Chrome扩展程序,以在试图强行加载到您的任何网站上禁用平滑滚动,我想删除“滚轮” '收听者来自<body>
是这样做的最直接途径)。是否有任何JavaScript API可用于通过Chrome扩展程序访问和修改此事件侦听器列表,还是仅限于开发工具GUI?
需要明确的是,我知道removeEventListener(),但是该方法要求您具有对原始侦听器对象的引用-我没有此类引用,因此该方法不适合我的目的。
不幸的是,当事件监听器注册到window
(如您的问题中)或时,eholder0的答案无济于事document
。为此,一种方法是,大多数代码和库通常在冒泡阶段注册事件侦听器,方法是将的第三个useCapture
参数传入false addEventListener
(或者根本不传入)。由于捕获阶段首先发生,因此可以通过注册停止进一步传播的捕获阶段侦听器来防止事件侦听器被调用。
例如,在某个代码查看站点(以“ r”开头,以“ eviewable.io”结尾)上,该功能取消了使用鼠标中键单击来通过文档中的mousedown事件进行滚动的功能,扩展内容中的以下内容脚本工作原理:
document.addEventListener("mousedown", function (event) {
event.stopPropagation();
}, true);
注意,第三个参数是true
注册捕获阶段事件侦听器。还要注意,它并没有调用event.preventDefault()
,所以浏览器的内置滚动功能被保留。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句