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

时间:2015-12-17 03:25:46

标签: javascript google-chrome

当用户的鼠标离开视口时,某些网站会显示弹出窗口。这是一个非常恶化的行为,我想摆脱。我的策略是编写一个TamperMonkey脚本来摆脱或阻止这种行为。不幸的是,我没有尝试过任何工作 注意:我正在努力使这个脚本尽可能通用。

事件正在被添加(可能有其他方式,但我还没有得到那些):

初始化一个对象,执行该行:

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

Example

以下是我的尝试:

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

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

但是这给了我以下错误:&#34; someHandler未定义&#34;,可能是因为someHandler在一个对象内并且无法从外部访问(我错过了什么?)< / p>

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

    getEventListeners(document.documentElement中)

但不幸的是,这种方法显然只存在于开发工具和can't be accessed from TamperMonkey

  • 然后我想&#34;也许Chrome控制台可以在每次加载页面时运行自己的脚本?&#34;但我在这方面找不到任何东西。
  • 我的下一个想法是&#34;如果我无法将其删除,我将阻止它被解雇!&#34;。

    document.documentElement.addEventListener(&#39; mouseleave&#39;,myOwnHandler);

    function myOwnHandler(e){
        e.stopImmediatePropagation();
    }

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

任何有关如何使其中一种工作或任何其他想法的线索都将受到赞赏。

由于

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

1 个答案:

答案 0 :(得分:1)

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