uBlock Origin フィルター覚書(書き方・サンプル)
uBlock Origin のフィルターに関する覚書です。
はじめに
uBlock Origin (以降uBO) は、「広告ブロッカー」として導入している方がほとんどだと思います。ですが uBO は、広域スペクトルブロッカーです。これは、単なる「広告ブロッカー」としても動作することができる、より強力なブロッカーです。
uBO のフィルターは、UserScript や UserCSS に類するツールの一種であり、フィルターを理解して使用することでより良いウェブ環境を簡易に構築できます。
※「コンテンツブロッカー」と呼ばれることもあります。
※Adblock Plus のフィルターも大部分が類似しています。
フィルターの種類
uBOのフィルターには、次の種類があります。
- 静的ネットワークフィルター (static network filtering)
- 対象リクエスト(通信)をブロックする
- 書式:
[対象URL]
+ ($
+[オプション]
) - 書式:
@@
+[対象URL]
+ ($
+[オプション]
) - 例:
||example.com^
- 例:
@@||example.com^$document
- 静的拡張フィルタリング (static extended filtering)
- 対象URLの要素をCSS・JavaScript・コード削除で対処する
- 書式:
[ドメイン名(ホスト名)]
+##
+[設定]
- 書式:
[ドメイン名(ホスト名)]
+#@#
+[設定]
- 例:
example.com##h1
- 例:
example.com,example.net#@#h1
コメント - 共通
記号 | 概要 |
---|---|
! | コメント |
!#if [condition] | !#if [condition] |
!#include [file name] | !#include [file name] |
サンプル
! コメント
!#if false
ブロックコメント
!#endif
静的ネットワークフィルター (static network filtering)
書式
[対象URL]
+ ($
+[オプション]
)- 適用
@@
+[対象URL]
+ ($
+[オプション]
)- 例外(適用を打ち消す)
※[対象URL]は、static extended filtering の[ドメイン名]とは大きく異なります。
※[対象URL]は、||
(domain name anchor)でドメイン名を指定できます。
※[対象URL]は、ドメイン名だけでなく、URLを指定できます。
※[対象URL]は、*
(ワイルドカード)を使用できます。
※[対象URL]は、複数のURLを指定することはできません。
※[オプション]には、カンマ(,
)区切りで複数のオプションを設定できます。
主な記号の意味
記号 | 概要 |
---|---|
|| | ドメイン単位の指定(domain name anchor) |
@@ | 例外ルール |
* | すべてのURL |
^ | 区切り |
$ | オプション |
オプション
リクエストを制限する
オプション | 概要 |
---|---|
document, doc | ウェブページを制限する |
subdocument, frame | 埋め込みページを制限する |
image | 画像ファイルを制限する |
script | スクリプトファイルを制限する |
stylesheet, css | CSSスタイルシートファイルを制限する |
font | フォントファイルを制限する |
media | メディアファイルを制限する |
object | ブラウザプラグインによって処理されるコンテンツを制限する |
xmlhttprequest, xhr | XMLHttpRequest or Fetch API を制限する |
ping | navigator.sendBeacon() を制限する |
websocket | WebSocketを制限する |
webrtc | WebRTCを制限する |
popup, popunder | ポップアップウィンドウを制限する |
other | その他 (上記に含まれないリクエスト)を制限する |
ドメインで制限する
オプション | 概要 |
---|---|
domain= | 指定したドメインにのみ適用されるようにフィルターを制限する |
first-party, 1p | ファーストパーティのリクエストを制限する |
third-party, 3p | サードパーティのリクエストを制限する |
strict1p | 厳格なファーストパーティのリクエストを制限する |
strict3p | 厳格なサードパーティのリクエストを制限する |
denyallow= | default-deny / allow-exceptionally 機能 |
Content-Security-Policy を設定する
オプション | 概要 |
---|---|
csp= | CSPを設定する |
inline-script | CSPを設定して、インラインスクリプトを無効化する |
inline-font | CSPを設定して、インラインフォントを無効化する |
リダイレクトを設定する
オプション | 概要 |
---|---|
redirect= | リダイレクトを作成する |
redirect-rule= | 静的なリダイレクトを作成する |
match-case | $redirect= と共に設定すると大文字小文字を区別する |
redirect用の資源 | 概要 |
---|---|
none | リダイレクトを無効にする |
empty | 空の応答にリダイレクトする |
click2load.html | 埋め込みページ用。クリックすると元ページが読み込まれる |
1x1.gif | |
2x2.png | |
3x2.png | |
32x32.png | |
noop.html | |
noop.js | |
noop.txt | |
noop-0.1s.mp3 | |
noop-1s.mp4 |
例外フィルター用のオプション
オプション | 概要 |
---|---|
elemhide, ehide | 対象ページのすべてのコスメティックフィルタリングを無効化する |
specifichide, shide | 対象ページの一致するコスメティックフィルタリングを無効化する |
generichide, ghide | 一般的な一致するコスメティックフィルタリングを無効化する |
cname |
その他のオプション
オプション | 概要 |
---|---|
all | $popup,document,inline-font,inline-script と同等 |
badfilter | 既存のフィルターを無効化する |
important | 他の例外フィルターを無視する |
removeparam= | ネットワーク要求前にクエリ文字列からパラメータを削除する |
header= | 応答ヘッダーを確認して制限する |
サンプル
! 例:ドメイン単位の指定
||example.com^
||192.168.1.1^
! 例:例外ルール
@@||example.net^
! 例:すべてのURL
! すべてのサードパーティリクエストをブロックする
*$third-party
! 外部スクリプトをブロックする
*$script
! スクリプトをブロックする
*$script,inline-script
! 例:パスの指定
||example.com/test/*
||example.com/*/style.css$stylesheet
! 例:ファイル名の指定
^example.html^
^example.js^
! 例:URLの指定
http://example.com^
https://example.com/^
https://example.com/test.html^$document
! ※トップページ以外のページは、オプションを明示的に指定する必要があります
! 例:HOSTSファイル
example.com
! 例:ページリクエストを制限する
||example.com^$document
! 例:サードパーティリクエストを制限する
||example.com^$third-party
! 例:スクリプトとインラインスクリプトを制限する
||example.com^$script,inline-script
! 例:ワーカーをCSPを介して制限する
||example.com^$csp=worker-src 'none'
静的拡張フィルタリング (static extended filtering)
書式
[ドメイン名(ホスト名)]
+##
+[指定]
- 適用
[ドメイン名(ホスト名)]
+#@#
+[指定]
- 例外(適用を打ち消す)
※[ドメイン名]は、static network filtering の[対象URL]とは大きく異なります。
※[ドメイン名]は、URL(特定のページだけ)を指定することはできません。
※[ドメイン名]は、カンマ(,
)区切りで複数指定できます。
※[ドメイン名]は、一部の機能を除いて*
(ワイルドカード)を使用できます。
※[ドメイン名]は、サブドメインを省略でき、サブドメインにも適用されます。
※[指定]には、[CSSセレクタ]/[化粧品フィルター]/[アクション演算子]/[スクリプトレットインジェクション]を指定できます。
主な記号の意味
記号 | 概要 |
---|---|
## | 要素非表示 |
#@# | 要素非表示の例外ルール |
##^ | HTMLフィルター |
#@#^ | HTMLフィルターの例外ルール |
##+js | スクリプトレットインジェクション(スクリプト挿入) |
#@#+js | スクリプトレットインジェクションの例外ルール |
※要素非表示は、対象要素に「display: none !important;
」のCSSを適用します。
※HTMLフィルターは、対象要素をブラウザ解析前にドキュメントから要素を削除します。
ブラウザ解析後、動的に要素を作成した場合、要素は削除されません。
※HTMLフィルター以外の適用タイミングは、ブラウザ解析後です。
そのため、要素非表示が遅れて一瞬表示されることがあります。
HTMLフィルターは、ブラウザ解析前に要素を削除するため、表示されることはありません。
※スクリプト挿入は、特定のJavaScriptコードをページに挿入します。
自由なJavaScriptを挿入できるわけではありません。
挿入可能なコードは、リソースライブラリ から確認できます。
サンプル
! 例:要素非表示
example.com##h1
! 例:要素非表示の例外
example.com#@#h1
! 例:CSS セレクタを指定する
example.com###target
example.com##.target
example.com###parent .target
! 例:HTMLフィルター
example.com##^h1
example.com##^#target
example.com##^.target
! 例:コスメティックフィルター
example.com##body > div:has-text(Sponsored)
strikeout.me##body > div:has(img[alt="AdBlock Alert"])
! 例:スクリプトレットインジェクション
example.com##+js(noeval)
! 例:複数サイトの特定要素を非表示
example.com,example.net##h1
! 例:全サイトの特定要素を非表示(非推奨)
*##h1
Adblock Plus の固有機能
記号 | 概要 |
---|---|
#?# | 要素非表示(拡張セレクター構文を使用できる) |
#$# | スニペットスクリプトを実行する |
※#?#
は、:-abp-properties()
, :-abp-has()
, :-abp-contains()
を使用できます。
広告ブロック以外の使用例
! Google検索結果から、特定サイトを除外
www.google.com,www.google.co.jp###search .g:has(a[href*="://example.com/"])
! スクリプトの実行阻止
||example.com^$script,inline-script
! ワーカーの実行阻止
||example.com^$csp=worker-src 'none'
! サードパーティリクエストの制限
||example.com^$third-party
! 個別要素の非表示
! ポップアップ全般
! GDPR関連
! Twitterのプロモーションを非表示
! 特定サイトへのリンクを非表示
! コピペガードの無効化
! アンチAdBlocker対策
備考
uBlocklist
Google検索結果から、特定サイトを除外する専用の拡張機能もあります。
※Bing / DuckDuckGo などの他検索エンジンも合わせてブロックできます。