查資料的時候發現 uBlock Origin 的「Static filter syntax」已經自己實作 :has()
了 (雖然有一些限制)。
這個 CSS4 (draft) 的特性目前還沒有瀏覽器支援,所以 uBlock Origin 決定自己來:
This is a planned CSS4 operator, but no browser supports it yet. I decided to go ahead and implement it so that it can already be used. See The Relational Pseudo-class: :has() in the Selector Level 4/Editor's Draft.
由於效能問題,要求一定要有 hostname,而不能是 global rule:
uBO's implementation is simplified so as to ensure performance. The :has operator must be used with at least one hostname (it must be specific), and must be of the form (example)[.]
這對於 html block 長的幾乎一樣,只有在某個地方多出 Promoted by ...
之類的結構處理起來很方便,可以拿來找出「裡面有廣告 div
的母體 div
」然後整包處理掉... (你不會只想要拿掉 Promoted by ...
,而是連廣告內容都拿掉)