我正在尝试使用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对象(无论用于附加它们的库),我可以覆盖它们中的一些吗?
答案 0 :(得分:2)
大多数库都使用addEventListener,因此您需要使用自己的函数覆盖它。请务必保留对原始addEventListener方法的引用,以便仍然可以添加事件。
我在这里有一个示例Greasemonkey脚本:http://userscripts.org/scripts/show/174829
它将收听所有事件并告诉您添加了哪些事件。显然,您可以修改此项以使“模糊”事件无法注册。