【问题标题】:Can a Greasemonkey script override AdBlock filters?Greasemonkey 脚本可以覆盖 AdBlock 过滤器吗?
【发布时间】:2009-03-02 22:25:46
【问题描述】:

我有一个 Greasemonkey 脚本试图访问一个被 Adblock 禁用的 HTML 元素。是否可以使用 Greasemonkey 脚本创建解决方法以防止与 Adblock 插件发生冲突?

我对任何想法持开放态度,但目前更改脚本以避免 Adblock 元素并不是解决方案。

其他信息

我试图“启用”的 addblock 元素是来自谷歌搜索结果的 Table 元素。

<table id="mbEnd" width="30%" style="margin-bottom: 1em;">

隐藏元素的 Adblock 过滤器是:

google.com,google.com.au,google.co.uk,google.ca,google.se#table(id=mbEnd)(width=30%)

更新:有些人建议我简单地禁用我正在处理的页面的广告拦截过滤器。我也认为这是一个非解决方案,因为任何使用我的脚本的人都必须执行相同的操作,而且我不能指望我的所有用户都手动修改他们的 Adblock 设置。

【问题讨论】:

  • 您可以为该网站/元素禁用广告拦截
  • 您尝试访问的元素的具体细节是什么以及您尝试从中访问哪些属性?

标签: javascript greasemonkey adblock


【解决方案1】:

您可以为特定页面或域禁用广告拦截。只需单击符号旁边的箭头,它就会为您提供更多禁用广告屏蔽的选项。

没有办法让 Greasemonkey 脚本自动覆盖 Adblock,因为 Adblock 在加载任何 Greasemonkey 脚本之前会影响页面。

【讨论】:

  • 我认为有趣的一点是 Adblock 影响页面的方式。它不会从文档中解析 HTML 元素,但我的理解是它将用户 CSS 样式表应用于隐藏 HTML 元素的文档。见adblockplus.org/en/faq_internal#elemhide
  • ABP 会删除它可以检测到的尽可能多的内容作为广告链接,并且只有在不可避免时才会隐藏元素 (adblockplus.org/en/filters#elemhide_basic)。如果唯一的问题是元素隐藏,您将能够访问 DOM 元素,因为 CSS 不会对 JavaScript 隐藏它。
  • 因此,我坚持我原来的答案,即 Greasemonkey 将输给 ABP。如果元素被 ABP 阻止,那么 JavaScript 应该如何处理它?
  • 如果有帮助,我验证了相关元素没有从文档中解析出来。
【解决方案2】:

您要访问什么类型的元素?大多数页面元素应该仍然可用,只是使用 'display: none;'。

我在 Greasemonkey 脚本中使用 jQuery,它能够在我使用 ABP 禁用它后从图像中获取替代文本。

$('#s1 + img')[0].alt
=> Rohm and Haas Paint Quality Institute

如果您提供一些更具体的信息,我或许能够提供更具体的解决方案。

访问被阻止的 iframe 可能更难但可行。同样,更多细节将帮助我回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 2015-12-22
    • 2012-12-19
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    相关资源
    最近更新 更多