js 如何移除别人设置的未知的自定义的事件?
使用了别人的平台,发现平台对 body 自带了 touchmove 事件监听,
我该怎么获取对应的 事件函数 并移除?
在 chrome console 调用getEventListeners可以获取,但是代码中并不能~
求大佬指教~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
什么叫“使用了别人的平台”?
匿名事件句柄无法移除。
P.S. 比较 hack 一点的做法是重写
HTMLElement.prototype.addEventListener
方法,但这要求你覆写的代码要在绑定之前执行,而如果你是通过注入等方式的话并不能控制执行时序。当然是覆盖定义它,一定要在别人声明之后定义,直接写
...on('touchmove', null)
看源码先看一下他的事件是怎么侦听上的。标准方式两种,
ontouchmove = xxx
和addEventListener('touchmove', xxx)
,更常使用后者。对于前者,重新赋值为null
就好。对于后者,addEventListener
系列 API 是不会自己暴露 listener 的,也没有提供全部清除的功能,只能看这个函数是否另外以某种方式声明为了全局变量或某全局变量的某个属性然后找它,然后removeEventListener
。找不到就需要如其他回答所说,hack 一下
addEventListener
,或重新生成对应 DOM。当然上述一切都只是原生 JS API 上的通用方法。如果:
on
绑上的侦听器,提供了off
可以在不提供相关侦听器时移除所有。可以试试这样来阻止。
匿名没办法。可以考虑一些变态办法。