【问题标题】:Adblock Plus - whitelisting ruleAdblock Plus - 白名单规则
【发布时间】:2016-01-27 16:55:04
【问题描述】:

我在页面上有一个看起来像这样的元素:

<a data-mytype="myvalue" href="http://example.com/promo/page">...</a>

此元素被以下 ABP 规则隐藏(存在于我使用的过滤器订阅之一中):

##[href*="/promo"]

如何编写一个白名单规则,根据特定的属性/值对(例如 data-mytype="myvalue" 之一)排除该元素被 Adblock Plus 隐藏?

我已经检查了Writing Adblock Plus filtersAdblock Plus filters explained 页面,但我还没有弄清楚如何(成功)编写基于指定属性的过滤器。

两个页面都提到标准 CSS 选择器应该可以工作,但这似乎不起作用:

@@a[data-mytype="myvalue"]

我还尝试了以下方法:

#@#[href*="/promo"][data-mytype="myvalue"]

我错过了什么?

注意:我不想要一个只会取消 ##[href*="/promo"] 的规则,我正在寻找一个仅基于特定属性/值对将元素列入白名单的规则。

编辑 (2016-03-17):稍微澄清了我的问题。

【问题讨论】:

    标签: filter adblock


    【解决方案1】:

    您首先禁用现有规则:

    #@#[href*="/promo"]
    

    请注意,选择器必须相同,否则元素隐藏异常将不适用。然后您可以添加自己的规则,该规则将考虑 data-mytype 属性:

    ##[href*="/promo"]:not([data-mytype="myvalue"])
    

    这两个规则的组合应该有你想要的效果。供参考::not() CSS pseudo-class

    【讨论】:

    • 那么ABP不会在没有明确取消黑名单规则的情况下将被列入黑名单的元素列入白名单吗?我认为白名单优先于黑名单。基本上,ABP 将根据黑名单规则制作一个要隐藏的元素列表,然后从该列表中删除任何符合白名单规则的元素,所有这些在实际隐藏所述元素之前完成。
    • @SilviuG:元素隐藏例外不适用于元素,它们适用于元素隐藏规则。所以规则的选择器部分必须相同,否则将不起作用。这有技术原因,无法检测到多个规则匹配同一个元素并决定应用其中的哪一个是不可能的。
    • 感谢您澄清技术原因。这不是我所希望的答案,但至少现在我有一些可靠的东西可以使用。
    • 注意::not 表达式的右括号缺失。否则,它会像宣传的那样工作
    【解决方案2】:

    规则###yourdiv可以被#@##yourdiv禁用(##.yourclass#@#.yourclass

    在你的情况下:#@#[data-mytype="myvalue"]

    【讨论】:

    • 我已经把我的问题澄清了一点,请重新检查一下。
    • @@||example.com^$elemhide@@||example.com^$generichide 怎么样,如果不是您正在寻找的内容,请给我一个示例,其中链接已被 Adblock Plus + Easylist 隐藏。
    • 测试页面包含示例链接。另外,我的规则中不能包含 example.com,我需要一个适用于任何域的通用规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 2013-07-03
    相关资源
    最近更新 更多