横幅与弹窗拦截:Adblock Plus 处理不同类型广告的策略
横幅广告
横幅广告通常有两种形态:
- 独立请求:从广告联盟域名(如 doubleclick.net、googlesyndication.com)加载,ABP 第一层网络请求拦截直接掐断;
- 内嵌 div:广告内容嵌在页面源码里,靠 CSS 类名(
ad,banner,sponsor等)标识,ABP 第二层元素隐藏处理。
好的订阅列表两条规则一起写——既拦请求又 hide div。差的列表只做一层,结果就是留空白。
弹窗广告
弹窗是最典型的网络请求拦截场景:
- 传统 window.open() 弹窗 → 浏览器本身会拦(Chrome 默认拦);
- 新标签页弹窗(
target="_blank")→ 浏览器不一定拦,但 ABP 能识别这类请求特征; - 弹出式视频广告(用户点击后先弹一个视频广告,看完才能进内容)→ 视频广告从广告域名加载,ABP 拦掉视频请求。
原生广告
原生广告(Native Ads)最棘手——它长得和正文几乎一样,从网站自己的域名加载,URL 和域名都看不出广告特征。处理原生广告必须靠元素隐藏:订阅维护者人肉分析页面结构,找到原生广告的 HTML 模式(如 class 里有 promo、recommended、related),写成 CSS 选择器隐藏。
这也是为什么原生广告的拦截准确率和订阅质量高度相关——需要持续投入人肉维护。
为什么有些弹窗拦不住
近年来网站开始使用"反拦截"策略:
- 用户点关闭按钮后弹出一个确认框"你确定要关闭本站的广告吗?";
- 弹窗加载完后用 JS 动态改写 DOM,让 CSS 选择器失效;
- 广告直接注入页面 iframe,iframe 的 URL 和主域名相同。
对付这种情况需要单独在 ABP 里写规则,或者找专门针对该网站的社区规则。