规则优先级与冲突解决:$important 和 @@ 谁赢
基本规则
ABP 规则引擎的优先级排序:
$important规则 → 最顶层,压过一切;@@例外规则 → 压过普通拦截规则;- 普通拦截规则 → 被例外覆盖;
- 元素隐藏
##→ 独立体系,与地址拦截互不影响(但@##例外能覆盖它)。
实际场景判断
场景一:你写了 @@ 但还是被拦了
可能原因:
- 对应的拦截规则带了
$important——这样它会压过你的@@; - 例外规则的域名不够精确,拦截规则匹配的域名范围更大;
- 你写的是地址例外,但误伤来自元素隐藏(两套体系独立,
@@不管##)。
场景二:Acceptable Ads 放行的广告你想拦
最简单的做法:
- 直接取消勾选 Acceptable Ads 订阅;
- 或者自己写一条
||广告域名^$important规则——加了$important它会压过 Acceptable Ads 里的@@例外。
场景三:你写的拦截规则不起作用
可能原因:
- 规则语法写错了(少了
||或^); - 该请求来自
third-party但你的规则没覆盖第三方; - 有一个带
$important的@@规则放行它; - 浏览器有内置拦截器或其他扩展也在拦同一个域名,产生冲突。
用开发者工具调试
Chrome / Firefox 的开发者工具 Network 面板里,被 ABP 拦掉的请求会显示:
- 红色或灰色的"Blocked"状态;
- 悬停或查看详情时能看到"Blocked by client";
- 某些版本的 ABP 会直接告诉你"被规则 X 拦截"。
在 Elements 面板里,被 ABP 元素隐藏的节点会显示:
- 灰色标记;
- 右侧 ABP 规则提示。
配置文件导入导出
ABP 设置面板里有"导入/导出设置"功能,能把所有自定义规则、订阅列表、白名单打包成一个 JSON 文件,方便在不同浏览器之间迁移。
写规则的黄金原则
- 宁可保守,不要宽泛——写精确域名比写模糊通配符好;
- 先观察后写——在 Network 面板里确认请求特征再动笔;
- 注释写清楚——
! 下面这条拦掉 XX 网站右侧的引导下载栏; - 遇到拦截器自己的问题就删订阅重加——缓存损坏是常见问题。