可能是目前最好用的Safari内容拦截应用

自从苹果在iOS 9中开放了Safari内容拦截接口以后,内容拦截应用一度火爆一时。1Blocker是最早的一批内容拦截应用之一,由两位国外独立开发者Rinat KhanovSalavat Khanov开发,有iOS和Mac版本。因为一些独有的功能和优秀的表现,获得了很高的评价,堪称是目前最好用的Safari内容拦截应用。

内容拦截≠广告拦截

关于内容拦截,很多人会有个先入为主的错误认识:内容拦截=广告拦截。这多半是因为此类拦截应用,在宣传的时候都会打着「广告拦截」的名号。

但真实情况并非如此——内容拦截是Safari区别于其他浏览器的一个内置特性。Safari以外的浏览器,拦截广告的扩展多是基于JavaScript脚本的。浏览器在读取网页时要先载入这些脚本,会导致加载时间变长,消耗内存增多,造成电池损耗。

而Safari的「内容拦截」则是通过预先将规则写入浏览器,来防止这些内容加载,以达到节省流量和加载时间的作用。能拦截的内容也不仅仅是广告,还包括追踪器、脚本、Cookies和其他会拖慢加载速度的内容。

启用内容拦截应用的方式很简单——Mac版需要安装Safari扩展,而iOS版只要在「设置>Safari>内容拦截器」中开启允许拦截即可。

1Blocker内置了9组拦截规则组,包括广告拦截、追踪脚本、反广告拦截、社交分享组件、评论组件等。启用后,这些拦截规则就将作用于Safari(包括原生应用中内嵌的Safari)。

高可玩性的自建规则

除了内置规则组外,1Blocker还具备非常高可玩性的自建规则,这也是它配称作「好用」的主要原因之一。

选取拦截页面元素

1Blocker iOS在之前的版本更新中,加入了选取拦截页面元素的可视化编辑器。这是1Blocker for iOS里我最喜欢的功能,它使得iOS上「拦截页面元素」这个功能的易用性提升了数倍。

举个例子来说,我们在浏览网页时,经常会看到该网站App的引流横幅,很影响阅读体验。这时候,就可以用Safari的Share Sheets呼出1Blocker的选择器,对要拦截的元素确认进行拦截。

虽然该功能还是Beta版,但是开发者已经做了不少可用性上的优化。比如由于页面元素的点选不可能很精准,所以提供了NarrowExpand两个选项供你调整选区。

自定义URL和Cookies拦截

除了隐藏元素,1Blocker还可以添加自定义URL拦截,以及针对某些域名屏蔽Cookies。声明这些规则时,需要用到「正则表达式」——一些用来描述字符规律的符号。

如果你不熟悉正则表达式也不要紧,首先App中有一些符号的基本使用说明。另外,由于Safari内容拦截本身就反对使用过于复杂的正则表达式,所以你大概只需要知道要用\. 来表示..*可以表示URL中的任意字符(或者没有字符),而 https?://可以表示http://https://( 1Blocker拦截规则中/不用转义) 即可。

下图是是对1Blocker完整拦截一个域名规则的一些解释,可以帮助理解和编写自己的规则。

白名单

虽然随着拦截插件的日渐盛行,越来越多的网站已经开始调整广告的呈现形式,或将移动业务重心转移至原生应用。但是,仍有很多独立站点依然依靠流量广告来作为收入来源。针对这些站点,1Blocker提供了一键设置白名单,通过Safari的Share Sheets呼出1Blocker即可「拉白」当前域名。

真正强大的Mac版

不管1Blocker for iOS有多么令人兴奋的功能,真正能发挥其所有功能的还当属Mac版。前者最大的短板在于:不管在可用性上做的多好,都始终回避不了内容拦截的本质——你需要首先能「找到」要拦截的内容,才能制定拦截规则

更彻底的元素拦截

和iOS版一样,1Blocker for Mac也有页面元素拦截的可视化编辑器,但是借助「网页检查器」这个利器,可以实现更为彻底的元素拦截。

在Mac的Safari上,通过右键菜单>检查元素,你可以打开「网页检查器」查看页面上任意元素的代码,以及站点加载的所有字体、脚本、样式表等资源文件。

在使用1Blocker for iOS屏蔽淘宝手机站广告横栏时,你会发现并不能有效的拦截。这是因为像1Blocker这种拦截器,在选择元素的时候,使用的是元素的idclass这类简单选择器。

这些选择器通常能做到唯一对应,但淘宝这个横栏由于是JS生成的,idclass的值每次都不同。虽然你生成的规则能成功拦截这个id=o12dfs的元素,但是再次刷新后,它又变成了id=idfd23。这就导致你之前制定的规则完全无效。

好在1Blocker 支持所有被WebKit所支持高级CSS选择器,也就是说可以运用一些高级语法来更精准的选择元素。比如通过分析源码发现淘宝的这个元素标签有一个行内样式,于是就可以通过标签[属性]这种形式来精准匹配这个元素:div[style="display: block; position: relative; z-index: 0;"]

想要了解更多关于CSS Leve 4选择器请参考w3c的文档。另外,获取元素路径还有个便捷的办法——右击元素标签,选择「拷贝选择器路径」即可。

iCloud同步和导入规则包

1Blocker另一个令人难以割舍的原因在于,所有你修改和建立的拦截规则或白名单,都能通过iCloud实时同步。想象一下你在Mac上建立了一堆复杂的拦截规则,低头拿起iPhone就能访问经拦截后的网页的那种酸爽!

此外,在Mac上你所有的自建规则组,除了可以通过iCloud同步外,还能导出成后缀名为.1blockpkg的JSON格式文件。这样就可以将自己的规则组导出分享给别人,而接收方只要在Mac或iOS设备上打开文件就能导入你的规则包。

这里分享一个我从AdBlock著名的规则列表EasyList China中移植过来规则包,为了保证普遍适用性,只移植了通用拦截规则部分,欢迎从GitHub上下载或者fork走。

问题和不足

1Blocker当然也还存在不少问题,首先它所面临最根本的挑战是:我们真的需要一个iOS设备上的网页内容拦截器吗?既然我们在使用这些设备时,有超过90%的时间都是花在原生应用上,为余下的百分之几时间提供一个复杂的体验优化方案,怎么看都不向是个明智的决定。

试问,有多少影响阅读体验的广告是不能通过「阅读模式」一键解决的呢?

其次,亟需解决的还有本地化的问题。这里的本地化并非指简单的用户界面翻译,而是拦截规则的本地化。虽然它对于美国多数网站的优化拦截是到位的,但到了国内,最终效果与Adblock或uBlock等老牌拦截应用还有不小的差距。

1Blocker并没有一个活跃的社区,单靠用户反馈、开发者补足规则的形式,显然不足以应对全部状况。虽然1Blocker提供足够强大的自定义拦截工具,但完善拦截规则是一件需要投入大量学习成本和时间成本的事。

而普通用户对拦截应用好坏的评判,并非基于是否提供了各种自定义工具,而是看它能否一次安装就一劳永逸,默默地做好拦截工作。而对于Power user们来说,如果能精准地定位到影响网页加载的广告或脚本,把它们写进Surge这类全局代理软件的Reject列表里,难道不是一件适用面更广的事么?

尾巴

虽然我还挺为1Blocker的产品定位担忧的,但对于苹果「全家桶」用户们来说,它仍然不失为目前最为好用的Safari内容拦截器。尤其是当「好用」这个词不作为形容词,而作为动词时。

现在你可以在App Store免费下载1Blocker for iOS,但免费版本仅可开启一组内置规则组。多组规则、元素屏蔽、白名单和iCloud同步等高级功能,需要30元内购解锁。Mac版售价68元,购买后可使用全部功能。