自從蘋果在 iOS 9 中開放了 Safari 內容攔截接口以后,內容攔截應用一度火爆一時。1Blocker 是最早的一批內容攔截應用之一,由兩位國外獨立開發者 Rinat Khanov、Salavat 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 版,但是開發者已經做了不少可用性上的優化。比如由于頁面元素的點選不可能很精準,所以提供了 Narrow
和 Expand
兩個選項供你調整選區。
自定義 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 這種攔截器,在選擇元素的時候,使用的是元素的id
或 class
這類簡單選擇器。
這些選擇器通常能做到唯一對應,但淘寶這個橫欄由于是 JS 生成的,id
和 class
的值每次都不同。雖然你生成的規則能成功攔截這個 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 元,購買后可使用全部功能。