X浏览器的广告拦截模块,针对手机相比PC浏览器的性能不足这一问题做了大量的优化工作,在保证性能的基础上尽可能的兼容更多的拦截规则,同时也对ABP的语法规则做了简化,并扩展了一些X浏览器自身的拦截规则语法,目前已经兼容了90%以上的ABP拦截规则的语法。经测试导入20万条ABP的拦截规则依然可以保持良好性能。
X浏览器广告拦截在 ADBlock Tester的测试中得到了满分100分的好成绩,详情请参见这篇文章 - 测试浏览器广告拦截效果和兼容性。
从广告拦截的工作原理来讲我们把拦截规则分为两大类,我们称之为URL拦截规则和隐藏元素规则 下面我们简单介绍下这两种拦截规则的工作原理。
URL拦截规则
浏览器进行渲染页面的时候需要加载很多资源文件,包括JS脚本、CSS样式表、图片等。其中很多广告资源就隐藏在这些资源URL中,比如某个用于显示广告的JS脚本,有些高级用户直接简单粗暴的禁止执行JS脚本可以达到拦截恶意广告的目的。但是禁用了JS脚本可能也会导致网页本身无法正常工作,所以最好的做法就是可以识别出那些资源url可能是用于加载广告的,放行正常资源URL,拦截恶意广告资源URL。
URL拦截规则其主要功能就是匹配加载广告资源的URL而达到拦截恶意广告的目的,这些规则通常是域名、路径、查询字符串的组合,类似下面这样。
||apologyjaguar.com^ |
URL拦截规则的优点是可以在资源被加载之前就进行拦截,这样避免了过多的资源流量消耗,通常来讲其拦截性能也不错。
隐藏元素规则
虽然URL拦截规则很好,但它也不是万能的。有些场景下我们无法通过拦截URL资源来达到去除广告的目的,比如广告不是以资源的方式加载,而是直接嵌入到页面本身,或者在依赖的资源中同时夹杂着正常业务和广告。这时候我们就无法通过匹配资源URL的方式进行拦截恶意广告了。
在这种背景下我们就有了另外一种拦截规则, 隐藏元素规则。虽然称之为拦截规则,但其工作方式却不是拦截,而是隐藏。顾名思义这种工作方式是等待页面元素渲染完成以后再识别出广告元素将其隐藏。
这种类型的规则其实通过浏览器的选择器语法找出匹配的元素,再从浏览器的DOM树中移除从而达到屏蔽广告的目的。下面是隐藏元素规则的一些示例。
allmonitors24.com,streamable.com##.topbanner |
基于这种工作原理,有时候我们发现个别页面的广告突然闪烁一下就消失了,就是因为页面的广告元素还没有来得及移除就被渲染出来了的缘故。
后继的文章我们会分别介绍URL拦截规则和 隐藏元素规则 的基本语法规则和示例。