从Greasemonkey禁用所有单击事件不起作用

时间:2013-11-15 23:50:21

标签: javascript jquery greasemonkey sandbox

我正在尝试使用JQuery从我的Greasemonkey脚本中禁用页面上的所有点击事件,如下所示:

$("*").unbind("click");
$("[onclick]").removeAttr("onclick"); 

使用

将Jquery加载到greasemonkey脚本中
// @require  http://code.jquery.com/jquery-1.10.1.min.js

当我从Firefox或Firebug控制台手动运行时,它可以正常工作 但它不适用于Greasemonkey!

有什么问题?
我怎么能从greasemonkey那里做到这一点?

1 个答案:

答案 0 :(得分:2)

  

当我从Firefox或Firebug控制台手动运行时,它可以正常工作   但它不适用于Greasemonkey!

由于Greasemonkey通常在包装函数中运行您的脚本,因此页面使用的jQuery与脚本中的jQuery不同。或者你用不同的方法覆盖jQuery函数 因此,脚本中的.unbind()无法删除页面上的侦听器,因为它们添加了不同的jQuery函数。

当您在Firebug控制台中运行它时,它会起作用,因为Firebug控制台将使用页面中的jQuery函数,而不是Greasemonkey脚本。

要解决此问题,只需使用页面中的jQuery函数取消绑定侦听器即可 我们可以使用unsafeWindow来访问页面的窗口对象。

unsafeWindow.$("*")
    .unbind("click")
    .off("click")
    .removeAttr("onclick");

注意:这只会删除jQuery添加的事件监听器 要删除.addEventListener()添加的侦听器,您必须使用hi-jack方法来侦听对其的调用,然后对其进行过滤,以便不添加单击事件。