【问题标题】:Disabling All Click Events from Greasemonkey doesn't work从 Greasemonkey 禁用所有点击事件不起作用
【发布时间】:2013-11-15 23:50:20
【问题描述】:

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

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

使用

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

当我从 Firefox 或 Firebug 控制台手动运行它时,它可以工作。
但它对 Greasemonkey 不起作用!

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

【问题讨论】:

  • 我看到了你的问题...你需要使用页面的原生 jQuery 函数来解除监听器的绑定。 unsafeWindow.$('*').unbind('click').off('click');
  • @JoeSimmons,请给出答案,我会投赞成票。

标签: javascript jquery greasemonkey sandbox


【解决方案1】:

当我从 Firefox 或 Firebug 控制台手动运行它时它可以工作。
但它对 Greasemonkey 不起作用!

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

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

要解决这个问题,只需使用页面中的 jQuery 函数来取消绑定监听器。
我们可以使用unsafeWindow来访问页面的window对象。

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

注意:这只会删除 jQuery 添加的事件监听器。
要删除.addEventListener() 添加的侦听器,您必须劫持该方法以侦听对其的调用,然后过滤它们以便不添加点击事件。

【讨论】:

    猜你喜欢
    • 2016-05-13
    • 2018-06-15
    • 2017-08-22
    • 2012-11-07
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多