js 如何移除别人设置的未知的自定义的事件?

发布于 2022-09-13 00:34:33 字数 133 浏览 28 评论 0

使用了别人的平台,发现平台对 body 自带了 touchmove 事件监听,
我该怎么获取对应的 事件函数 并移除?
在 chrome console 调用getEventListeners可以获取,但是代码中并不能~
求大佬指教~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

从此见与不见 2022-09-20 00:34:33

什么叫“使用了别人的平台”?

匿名事件句柄无法移除。

P.S. 比较 hack 一点的做法是重写 HTMLElement.prototype.addEventListener 方法,但这要求你覆写的代码要在绑定之前执行,而如果你是通过注入等方式的话并不能控制执行时序。

鱼忆七猫命九 2022-09-20 00:34:33

当然是覆盖定义它,一定要在别人声明之后定义,直接写
...on('touchmove', null)

可爱暴击 2022-09-20 00:34:33

看源码先看一下他的事件是怎么侦听上的。标准方式两种,ontouchmove = xxxaddEventListener('touchmove', xxx),更常使用后者。对于前者,重新赋值为 null 就好。对于后者,addEventListener 系列 API 是不会自己暴露 listener 的,也没有提供全部清除的功能,只能看这个函数是否另外以某种方式声明为了全局变量或某全局变量的某个属性然后找它,然后 removeEventListener

找不到就需要如其他回答所说,hack 一下 addEventListener,或重新生成对应 DOM。


当然上述一切都只是原生 JS API 上的通用方法。如果:

  1. 你使用的平台有相应 API,可以使之不侦听或使侦听函数简单跳出,那就用那个 API。
  2. 你使用的平台基于其他框架,那就找那个框架提供的相应 API,但你没说相关信息我也不知道是啥框架。比如 jQuery,对于 on 绑上的侦听器,提供了 off 可以在不提供相关侦听器时移除所有。
  3. 你使用的平台可以改源码,你也愿意改源码,那就改。
黎夕旧梦 2022-09-20 00:34:33

可以试试这样来阻止。

$('#XX').on('touchmove', function(e){
    e.preventDefault();
})
盛装女皇 2022-09-20 00:34:33

匿名没办法。可以考虑一些变态办法。

  1. 楼上说的覆盖 addEventListener。以及特定的 onxxx
  2. 事件是绑定在DOM上面的,那么你可以把DOM删了,然后重新生成。
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文