📢 精选用户脚本:快速切换管理你的搜索引擎

广告拦截简介

X浏览器的广告拦截模块,针对手机相比PC浏览器的性能不足这一问题做了大量的优化工作,在保证性能的基础上尽可能的兼容更多的拦截规则,同时也对ABP的语法规则做了简化,并扩展了一些X浏览器自身的拦截规则语法,目前已经兼容了90%以上的ABP拦截规则的语法。经测试导入20万条ABP的拦截规则依然可以保持良好性能。

X浏览器广告拦截在 ADBlock Tester的测试中得到了满分100分的好成绩,详情请参见这篇文章 - 测试浏览器广告拦截效果和兼容性

从广告拦截的工作原理来讲我们把拦截规则分为两大类,我们称之为URL拦截规则隐藏元素规则 下面我们简单介绍下这两种拦截规则的工作原理。

系列导航

你将学到什么

  • 两类规则的区别:URL拦截规则 vs 隐藏元素规则
  • 什么时候用哪一种:典型场景与优缺点
  • 下一步怎么学:各种规则的详细语法(文末提供相关阅读)

快速导航

URL拦截规则 vs 隐藏元素规则

维度 URL拦截规则 隐藏元素规则
生效时机 资源请求发出前 页面渲染后
是否省流量 通常更省流量 一般不省流量(资源多已加载)
典型目标 广告JS/CSS/图片等资源URL 直接嵌入页面的广告模块
可能现象 误杀导致功能异常 广告可能闪烁一下再消失
适用场景 “广告以资源形式加载”更有效 “广告混在DOM里”更有效

URL拦截规则

浏览器进行渲染页面的时候需要加载很多资源文件,包括JS脚本、CSS样式表、图片等。其中很多广告资源就隐藏在这些资源URL中,比如某个用于显示广告的JS脚本,有些高级用户直接简单粗暴的禁止执行JS脚本可以达到拦截恶意广告的目的。但是禁用了JS脚本可能也会导致网页本身无法正常工作,所以最好的做法就是可以识别出那些资源URL可能是用于加载广告的,放行正常资源URL,拦截恶意广告资源URL。

URL拦截规则其主要功能就是匹配加载广告资源的URL而达到拦截恶意广告的目的,这些规则通常是域名、路径、查询字符串的组合,类似下面这样。

||apologyjaguar.com^
/haojio/js/scoll_bg.js
/heituad/*
/hjstore/system/banner/*.txt

URL拦截规则的优点是可以在资源被加载之前就进行拦截,这样避免了过多的资源流量消耗,通常来讲其拦截性能也不错。

隐藏元素规则

虽然URL拦截规则很好,但它也不是万能的。有些场景下我们无法通过拦截URL资源来达到去除广告的目的,比如广告不是以资源的方式加载,而是直接嵌入到页面本身,或者在依赖的资源中同时夹杂着正常业务和广告。这时候我们就无法通过匹配资源URL的方式进行拦截恶意广告了。

在这种背景下我们就有了另外一种拦截规则, 隐藏元素规则。虽然称之为拦截规则,但其工作方式却不是拦截,而是隐藏。顾名思义这种工作方式是等待页面元素渲染完成以后再识别出广告元素将其隐藏。

这种类型的规则其实通过浏览器的选择器语法找出匹配的元素,再从浏览器的DOM树中移除从而达到屏蔽广告的目的。下面是隐藏元素规则的一些示例。

allmonitors24.com,streamable.com##.topbanner
drugs.com##.topbanner-wrap
blabber.buzz##.topfeed
drivespark.com##.topsection div[style^="float"]
techreen.com##.tr-block-header-ad

基于这种工作原理,有时候我们发现个别页面的广告突然闪烁一下就消失了,就是因为页面的广告元素还没有来得及移除就被渲染出来了的缘故。

后继的文章我们会分别介绍URL拦截规则隐藏元素规则 的基本语法规则和示例。

常见问题

为什么有些广告拦不掉?

常见原因包括:广告不是通过独立资源URL加载(更适合用隐藏元素规则),或者网站的广告逻辑与正常业务资源混在一起(规则需要更精细)。

为什么页面广告会先闪一下再消失?

隐藏元素规则通常是等待页面渲染后再移除DOM元素,因此可能出现“先渲染出来再被隐藏”的短暂闪烁。

导入很多规则会不会卡?

X浏览器针对移动端性能做了优化。文档开头提到的测试结果显示:导入约20万条ABP规则依然可以保持良好性能。

相关阅读

扩展阅读