我正在尝试使用JQuery从我的Greasemonkey脚本中禁用页面上的所有点击事件,如下所示:
$("*").unbind("click");
$("[onclick]").removeAttr("onclick");
使用
将Jquery加载到greasemonkey脚本中// @require http://code.jquery.com/jquery-1.10.1.min.js
当我从Firefox或Firebug控制台手动运行时,它可以正常工作 但它不适用于Greasemonkey!
有什么问题?
我怎么能从greasemonkey那里做到这一点?
答案 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方法来侦听对其的调用,然后对其进行过滤,以便不添加单击事件。