防止来自其他脚本的不需要的行为

Preventing unwanted behaviors from other scripts

本文关键字:不需要 脚本 其他      更新时间:2023-09-26

当用户的鼠标离开视口时,一些网站会显示弹出窗口。这是一种极其令人恼火的行为,我想摆脱它。我的策略是编写一个TamperMonkey脚本来消除或防止这种行为。不幸的是,我没有尝试过任何作品
注意:我正在努力使这个脚本尽可能通用。

事件是这样添加的(可能还有其他方式,但我还没有了解):

一个对象被初始化,在其中执行此行:

document.documentElement.addEventListener('mouseleave', someHandler);

示例

以下是我尝试过的:

  • 直接按名称删除事件处理程序(为了尽可能通用,这实际上是我最后一次尝试,因为我不一定知道事件处理程序的名称):

    document.dococumentElement.removeEventListener('mouseleaf',someHandler);

但这给了我以下错误:"someHandler未定义",可能是因为someHandler在对象内,无法从外部访问(我是不是缺少了什么?)

  • 然后我想,在处理结果之前,我会尝试在给定对象上找到所有事件侦听器:

    getEventListeners(document.docentElement)

但不幸的是,这种方法显然只存在于开发工具中,无法从TamperMonkey 访问

  • 然后我想"也许Chrome控制台可以在每次页面加载时运行自己的脚本?"但我在这方面找不到任何东西
  • 我的下一个想法是"如果我不能把它移走,我会阻止它开火!"。

    document.dococumentElement.addEventListener('mouseleaf',myOwnHandler);

    函数myOwnHandler(e){
    e.停止即时传播()
    }

但这也不起作用,因为我不能尽早参加活动。我告诉我的TamperMonkey脚本要尽早运行,但它仍然会被击败。要使stopImmediatePropagation()工作,我的事件需要首先启动(事件按照添加的顺序启动)。

任何关于如何让其中一个发挥作用的线索,或任何其他想法,都将不胜感激。

感谢

抱歉,无法使所有代码看起来正确。

如果这不是一个学习练习,而你只是想防止这种情况发生,为什么不使用广告拦截器呢?例如,uMatrix允许您在每个域的基础上阻止cookies/img的/scripts/frames/XHR,这样这些脚本就不会首先注册那些烦人的事件处理程序。