如何覆盖Javascript中的事件,无论以前用于绑定它的库是什么?

时间:2013-09-04 12:55:18

标签: javascript firefox javascript-events

我正在尝试使用firefox的greasemonkey扩展程序来覆盖我访问过的网站上的一些JavaScript事件。

例如,我想在 blur 事件绑定到 window 元素时显示一条消息,无论我访问的页面是什么。

我觉得这很容易。但要在每个案例中使用它都要困难得多,因为根据网站使用的库,JavaScript事件似乎存储在不同的地方。

以下是我在 greasemonkey 用户脚本中进行的测试:

window.onload = function(event) {    
    // Handle pure JS
    if (window.onblur) {
       console.log('There is a blur event on the window element of this page');
    }

    // Handle jQuery
    if (window.jQuery) {
        var jExpando = window[window.jQuery.expando];

        if (jExpando.events.blur) {
            console.log('There is a blur jQuery event on the window element of this page');
        }
    }
}

这适用于使用纯JavaScript或jQuery的每个页面,但我无法捕获其他库(如Mootools,Prototype ......)的 blur 事件侦听器。

因此,这是非常糟糕的代码,考虑到我必须自己处理所有现有的JavaScript库,我不知道该怎么做。

有没有办法让所有事件侦听器绑定到特定的JavaScript对象(无论用于附加它们的库),我可以覆盖它们中的一些吗?

1 个答案:

答案 0 :(得分:2)

大多数库都使用addEventListener,因此您需要使用自己的函数覆盖它。请务必保留对原始addEventListener方法的引用,以便仍然可以添加事件。

我在这里有一个示例Greasemonkey脚本:http://userscripts.org/scripts/show/174829

它将收听所有事件并告诉您添加了哪些事件。显然,您可以修改此项以使“模糊”事件无法注册。