ここではAdblock PlusやuBlock OriginやAdGuardなどの主要な広告ブロッカーのフィルタの構文、ルールについて解説します。
このページは各種広告ブロッカーのヘルプページやWikiを参考に作成されています。
- Adblock Plus - How to write filters
- uBlock Origin - Static filter syntax
- AdGuard - How to create your own ad filters
- AdGuard - DNS filtering rules syntax
- 基本(ネットワークルール)
- 特殊記号
- 正規表現
- 汎用ルール
- ドメインのみの記法
- 修飾子 | Modifiers
- $domain
- $important
- $third-party
- $first-party
- $match-case
- $document
- $image
- $stylesheet
- $script
- $object
- $font
- $media
- $subdocument
- $ping
- $xmlhttprequest
- $websocket
- $other
- $webrtc
- $object-subrequest
- $elemhide
- $content
- $jsinject
- $urlblock
- $extension
- $stealth
- $cname
- $generichide
- $genericblock
- $specifichide
- $strict3p
- $strict1p
- $badfilter
- $denyallow
- $inline-script
- $inline-font
- $all
- $header
- $method
- $to
- $popup
- $popunder
- $csp
- $permissions
- $redirect
- $redirect-rule
- $removeparam
- _
- $cookie
- $removeheader
- $replace
- $referrerpolicy
- $app
- $network
- $hls
- $jsonprune
- $empty
- $mp4
- コメント
- 応用(拡張ルール)
- 整形ルール | Cosmetic rules
- HTMLフィルタリングルール
- JavaScriptルール
- Scriptletルール
基本(ネットワークルール)
構文(ABNF)
ルール = ["@@"] パターン [ "$" 修飾子群 ]
修飾子群 = [修飾子0, 修飾子1[, ...[, 修飾子N]]]
- @@
- 例外に使用される記号
リクエスト(要求)のフィルタリングを無効にできる - パターン
- フィルタリングする対象のアドレス(URL)
特殊記号や正規表現なども使用できる - 修飾子
- 対象の範囲の限定化したり動作を変更をして基本ルールを調整する
「,」を使って複数指定ができ、一部の修飾子は先頭に「~」を付けると逆の意味を持つ
例
- @@||example.com^$script,image
「@@」という例外記号と「||example.com^」というパターンと「$script,image」という修飾子で構成されている
特殊記号
- *
- 0文字以上の任意の文字列にマッチするワイルドカード
- ||
- 任意のプロトコルとホストとサブドメインにマッチする記号
http://*. と https://*. と ws://*. と wss://*. を一遍に表せる - ^
- 文字と数字と「_ - . %」を除いた任意の記号にマッチする区切り文字
例えば http://example.com/?t=1&t2=t3 - |
- アドレスの先頭か末尾にのみにマッチを制限する記号
制限する位置が先頭か末尾かは「|」の位置に依存
例
- https://example.com/ads/*.png
http://example.com/ads/mainbanner.png や http://example.com/ads/otherbanner.png などにマッチする。 - ||example.com^
http://example.com/ や https://example.com:8000/ にはマッチするが http://example.com.jp/ にはマッチしない - swf|
http://example.com/annoyingflash.swf にはマッチするが http://example.com/swf/index.html にはマッチしない - |http://example.org
http://example.org にはマッチするが http://domain.example/?url=http://example.org にはマッチしない
正規表現
パターンを / でくくると正規表現が使用できます。正規表現の書き方についてはMozillaのドキュメントを参照してください。
ただし正規表現を使用したルールは動作が遅くなるので可能な限り避けるか、ルールの適用されるURLの範囲を限定すべきです。
なお、AdGuard for Safari/iOSではContent Blocking APIの制限で完全にはサポートされていません。
uBlock Originの場合、下記の例であれば「example」の部分が一致しているかを先に判定することでフィルタリングを高速化しています。自分でフィルタを書く場合は、なるべくトークン化可能な固定文字列を含むようにすると良いでしょう。
参考: https://github.com/gorhill/uBlock/wiki/Filter-performance
例
- /^https?:\/\/ads[0-9]\.example/
ads0.example ~ ads9.example のドメインのリクエストを全てブロックする。
汎用ルール
||example.com^
||example.com^$domain=~example.net
上のように特定のドメインに制限されない*1ルールを汎用(ネットワーク)ルールと呼びます。汎用ネットワークルールは$genericblockで無効化できます。
ドメインのみの記法
「example.com」のようなドメインのみのルールや「0.0.0.0 example.com」のようなHostsファイルの形式のルールはABPのフィルタ構文に則ると『URLに example.com が含まれるリクエストをブロックする』と解釈され、フィルタ本来のルールの意図とは異なる動作になります。
そのためuBlock Originでは上のような記法を『||example.com^ と同じようにexample.comとそのサブドメインの全てのリクエストをブロックする』と解釈します。なおAdGuardでは上のような記法には対応しておらず無効なルールとして解釈されます。
修飾子 | Modifiers
修飾子 | AdGuard for Windows, Mac, Android | AdGuard for Chromium | AdGuard for Firefox | AdGuard for iOS | AdGuard for Safari | AdGuardコンテンツブロッカー | uBlock Origin for Chromium | uBlock Origin for Firefox |
---|---|---|---|---|---|---|---|---|
$domain | ✅ | ✅ | ✅ | ✅* | ✅* | ✅ | ✅ | ✅ |
$important | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
$third-party ($3p, $~first-party) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
$first-party ($1p, $~third-party) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
$match-case | ✅ | ✅ | ✅ | ⏳ | ⏳ | ✅ | ✅* | ✅* |
$document ($doc) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅* | ✅* |
$image | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
$stylesheet ($css) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
$script | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
$object | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
$font | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
$media | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
$subdocument ($frame) | ✅* | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
$ping ($beacon) | ✅* | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ |
$xmlhttprequest ($xhr) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
$websocket | ✅ | ✅ | ✅ | ✅* | ✅* | ✅ | ✅ | ✅ |
$other | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
$object-subrequest🚫 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅* | ✅* |
$webrtc🚫 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
$elemhide | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
$content | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
$jsinject | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
$urlblock | ✅ | ✅ | ✅ | ✅* | ✅* | ❌ | ❌ | ❌ |
$extension | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
$stealth | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
$cname | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
$generichide ($ghide) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
$genericblock | ✅ | ✅ | ✅ | ✅* | ✅* | ❌ | ❌ | ❌ |
$specifichide | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
$strict3p | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
$strict1p | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
$badfilter | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
$denyallow | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
$inline-script | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
$inline-font | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
$all | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
$header | ✅ | ⏳ | ⏳ | ❌ | ❌ | ❌ | ✅ | ✅ |
$method | ⏳ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
$to | ⏳ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
$popup | ✅* | ✅ | ✅ | ✅* | ✅* | ❌ | ✅ | ✅ |
$popunder | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
$csp | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
$permissions | ✅ | ⏳ | ⏳ | ❌ | ❌ | ❌ | ✅ | ✅ |
$redirect ($rewrite) | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
$redirect-rule | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
$removeparam ($queryprune) | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
_ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
$cookie | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
$removeheader | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
$replace | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
$referrerpolicy | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
$app | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
$network | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
$hls | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
$jsonprune | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
$empty👎 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
$mp4👎 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
✅ — サポート済み
✅* — サポート済みだが制限等がある
⏳ — 実装予定
❌ — 未サポート
👎 — 非推奨
🚫 — 削除済み
$domain
指定のドメインかそのサブドメインが発行元(コンテキスト)の場合にのみ、ルールを適用するように制限します。
複数のドメインを指定する場合は「|」、除外には「~」、eTLDで「*」が使用できます。
また、正規表現も使用できます。正規表現では / と $ と | を \ でエスケープする必要があります。
Safariは、許可ドメインと不許可ドメインの同時使用をサポートしていないため、||example.com^$domain=example.com|~hoge.example.orgのようなルールは、AdGuard for iOSおよびAdGuard for Safariでは機能しません。
例
- ||example.com^$domain=example.org
example.orgとそのサブドメインでexample.comのリクエストをブロックする - ||example.com^$domain=example.*|~hoge.example.org
hoge.example.orgを除くexample.comやexample.orgなどとそれらのサブドメインでexample.comのリクエストをブロックする - ||example.com^$domain=/example[0-9].(co\|ne).jp\$/
example0.co.jpやexample9.ne.jpなどとそれらのサブドメインでexample.comのリクエストをブロックする
$important
他のルールより優先度を高くします。
ただしuBlock Originの場合は例外には使用できませんが、AdGuardでは例外にも使用できます。その為、uBlock Originではこの修飾子を付ければ確実に例外ルールを無視できますが、AdGuardではこの修飾子があっても例外ルールの影響を受ける可能性があります。
例
- ||example.org^$important
@@||example.org^
「||example.org^」は$importantがあり「@@||example.org^」よりも優先度が高いため、example.orgがブロックされる - ||example.org^$important
@@||example.org^$important
「||example.org^」にも「@@||example.org^」にも$importantがあるため、例外ルールが優先される(uBlock Originでは後者は無効) - ||example.org^$important
@@||example.net^$document
$importantが付いていても、例外ルールの$documentがあるため、example.netから送信されたexample.orgはブロックされない
$third-party
サードパーティのリクエスト、つまり送信元(オリジン)とは異なるドメインからのリクエストをブロックします。
例えば wikiwiki.jp から example.com へのリクエストはサードパーティです。
また$~third-partyの場合、サードパーティではないリクエストをブロックします。
例
- ||example.com^$third-party
example.comとそのサブドメインを除く全てのドメインでexample.comとそのサブドメインのリクエストをブロックする
$first-party
サードパーティではない、つまり同じドメインからの(ファーストパーティ)リクエストをブロックします。これは$~third-partyと同じ意味を持ちます。
例
- ||example.com^$first-party
example.comとそのサブドメインでexample.comとそのサブドメインのリクエストを全てブロックする。
$match-case
大文字と小文字が区別されるようになり、大文字小文字まで一致するアドレスのみにルールが適用されるようになります。($match-caseが指定されていないルールでは大文字と小文字が区別されません)
uBlock Originではパターンに正規表現が使用されたフィルタ以外では使用できません。
例
- ||example.org/Foo$match-case
http://example.org/Fooはブロックするがhttp://example.org/fooはブロックされない(uBlock Originではこのルールは無効) - /^https?:\/\/example.org\/[A-Z]/$match-case
http://example.org/Aはブロックするがhttp://example.org/aはブロックされない
$document
ページ(ブラウザのタブで読み込まれるHTMLドキュメント)のリクエストにマッチします。<iframe> インラインフレームには$subdocumentを使用してください。
AdGuardではこの修飾子がない限りページの読み込みがブロックされることはありません。uBlock Originではドメインのみの(||example.com^ のような)ルールに限りStrict blockingが有効となりこの修飾子の有無に関わらずWebページがブロックされます。
例外ルール(@@)が付いた場合、対象のページのブロックを完全に無効にします。これは$elemhide、$content、$jsinject、$urlblock、$extensionの例外ルールを同時に指定するのと同じ意味を持ち、uBlock Originにおける信頼するサイト、AdGuardにおけるホワイトリストとも同じ効果です。
uBlock Originでは外部のフィルタが信頼するサイトを決めるべきではないとして、例外ルールの$documentをサポートしていません。
$image
画像ファイルのリクエストにマッチします。
例
- ||example.com^$image
example.comとそのサブドメインの画像のリクエストをブロックする - ||example.com^$~image
example.comとそのサブドメインの画像以外のリクエストをブロックする
$stylesheet
CSSファイルのリクエストにマッチします。
$script
スクリプト(JavaScriptやVBScriptなど)のリクエストにマッチします。
ただし外部スクリプト限定のため、HTMLファイル内に埋め込まれた(インライン)スクリプトをブロックするには$inline-scriptを使用してください。
<!-- 外部スクリプトの例 -->
<script src="./example.js"></script>
<!-- インラインスクリプトの例 -->
<script>
alert("example");
</script>
$object
ブラウザのプラグイン(JavaやFlashなど)のリクエストにマッチします。
$font
フォント(.woffなど)ファイルのリクエストにマッチします。
$media
音楽ファイル(.mp3など)や動画ファイル(.mp4など)などのメディアのリクエストにマッチします。
$subdocument
ページ組み込みのリクエスト(<frame>や<iframe>)にマッチします。
AdGuard for Windows/Mac/AndroidではSec-Fetch-Destヘッダを使ってサブドキュメントを検出します。一部のメインページがサブドキュメントとして扱われることがあります。
$ping
navigator.sendBeacon()やリンクのping属性によるリクエストにマッチします。
AdGuard for Windows/Mac/Androidではnavigator.sendBeacon()が正しく検出できないことがあります。$pingをAdGuard for Windows/Mac/Android向けに利用するのは非推奨です。
$xmlhttprequest
AJAXリクエスト(XMLHttpRequestやFetch APIによって送信されたもの)にマッチします。
$websocket
WebSocketにマッチします。
$other
上のどのコンテンツにもマッチしないその他のリクエストにマッチします。
$webrtc
nowebrtcを代わりに使用してください。
WebRTCにマッチします。
$object-subrequest
$objectを代わりに使用してください。
uBlock Originでは$objectのエイリアスとして定義されています。
$elemhide
対応するページの整形ルールを無効にします。
例外ルールとしてしか使用できない(@@が必須)です。
例
- @@||example.com^$elemhide
example.comとそのサブドメインの整形ルールを全て解除する
$content
対応するページのHTMLフィルタリングルールと$replace、$jsonpruneを無効にします。
例外ルールとしてしか使用できない(@@が必須)です。
$jsinject
対応するページのJavaScriptルールとScriptletルールを無効にし、JavaScriptのコードの挿入を禁止します。
例外ルールとしてしか使用できない(@@が必須)です。
$urlblock
対応するページから送信された全てのリクエストをブロックしないようにし、$cookieも無効にします。
例外ルールとしてしか使用できない(@@が必須)です。
AdGuard for iOS/Safariでは、$urlblockを使ったルールは$documentの例外と同じように機能します。
$extension
対応するページの全ての拡張機能(ユーザースクリプト)を無効にします。ユーザースクリプトが動作しない一部のAdGuardでは無効です。
例外ルールとしてしか使用できない(@@が必須)です。
$stealth
対応するページでステルスモードを無効にします。
例外ルールとしてしか使用できない(@@が必須)です。
例
- @@||example.com^$stealth
クッキーのブロックと追跡パラメータの削除を除き、example.comとそのサブドメインでステルスモードを解除する - @@||example.net^$script,stealth,domain=example.org
example.orgとそのサブドメインから送られたexample.netのスクリプトのリクエストに限り、ステルスモードを解除する
ただしクッキーのブロックと追跡パラメータの削除の除外には$removeparamと$cookieを使用しなければなりません。
- @@||example.com^$stealth,cookie,removeparam
クッキーのブロックと追跡パラメータの削除も含めた全てのステルスモードの機能をexample.comとそのサブドメインで解除する。
例外ルールとしてしか使用できない(@@が必須)です。
$cname
対応するページへの解除されたCNAME クローキングのリクエストのブロックを回避します。($cnameが指定されていないルールではCNAMEで解決されたドメインはフィルタリングの対象になります)
例外ルールとしてしか使用できない(@@が必須)です。
$generichide
対応するページで汎用整形ルールが適用されないようにします。
例外ルールとしてしか使用できない(@@が必須)です。
$genericblock
対応するページで汎用ネットワークルールが適用されないようにします。
例外ルールとしてしか使用できない(@@が必須)です。
AdGuard for iOS/Safariでは、$urlblockを使ったルールは$documentの例外と同じように機能します。
$specifichide
$generichideとは逆に、対応するページでドメインが指定された整形ルール(汎用整形ルールではない整形ルール)が適用されないようにします。
例外ルールとしてしか使用できない(@@が必須)です。
$strict3p
$third-partyによる”弱い”サードパーティの一致ではなく、より厳密なサードパーティの一致を行うことができます。
これは送信元(コンテキスト)と要求先(リクエストドメイン)が少しでも異なればサードパーティ扱いされるということです。
送信元 | 要求先 | 3p | strict3p |
---|---|---|---|
www.example.org | www.example.org | × | × |
sub.example.org | × | ○ | |
www.example.com | ○ | ○ |
$strict1p
$first-partyによる”弱い”ファーストパーティの一致ではなく、より厳密なファーストパーティの一致を行うことができます。つまり$strict3pの逆がマッチ対象です。
$badfilter
参照しているルールを無効にします。
例外と似ていますが、サイトごとの無効化ではなく無効化する対象のルールをピンポイントで指定するため、特定のルールのみを消す場合に役立ちます。
例
- ||example.com^$badfilter
「||example.com^」というルールを無効化。 - @@||example.com^$script,badfilter
「@@||example.com^$script」というルールを無効化。 - *$image,badfilter
「*$image」というルールのみを無効化。「@@*$image」と違い「||example.com^$image」のようなルールは無効化されない。
$denyallow
特定のドメインでのみ動作しないルール(default-deny/allow-exceptionally)の実装をより行いやすくするための修飾子です。
複数のドメインを指定する場合は「|」が使用できます。
例
- *$3p,script,domain=a.example|b.example,denyallow=x.example|y.example
a.exampleとb.exampleでのx.exampleとy.exampleを除いたすべてのサードパーティ製スクリプトをブロックする
$inline-script
CSPによってページ内のスクリプト(インラインスクリプト)を無効化します。
$inline-font
CSPによってページ内のインラインフォントを無効化します。
$all
基本的なネットワークルールと$popup、$document、$inline-script、$inline-fontを同時に指定するのと同じ意味を持ちます。
例
- ||example.com^$all
以下のルールと等価
||example.com^
||example.com^$popup
||example.com^$document
||example.com^$inline-font
||example.com^$inline-script
$header
特定のレスポンスヘッダをもつレスポンス(応答)をブロックします。
構文
- $header=パラメータ
「パラメータ」に指定された名前をもつレスポンスヘッダのレスポンスをブロックする - $header=パラメータ:値
「パラメータ」に指定された名前をもつレスポンスヘッダの値に「値」のあるレスポンスをブロックする - $headerパラメータ:/正規表現/
「パラメータ」に指定された名前をもつレスポンスヘッダの値に正規表現がマッチするレスポンスをブロックする
/ と $ と , を \ でエスケープする必要があります
例
- ||example.com^header=via
example.comとそのサブドメインで Viaヘッダ をもつレスポンスをブロックする - ||example.org^$header=set-cookie:foo
example.orgとそのサブドメインで Set-Cookieヘッダ に foo という値をもつレスポンスをブロックする - @@||example.org^$header=set-cookie:/foo\, bar\$/
example.orgとそのサブドメインで Set-Cookieヘッダ に foo, bar$ の正規表現に一致する値をもつレスポンスのブロックを解除する
$method
指定されたHTTPメソッドを使用するリクエストにルールの範囲を限定します。
否定されたメソッドは許可されます。メソッドはすべて小文字で指定する必要がありますが、大文字小文字は区別されません。
1つのルールに複数のメソッドを追加するには、区切り文字として「|」を使用します。
||example.com^method=get|~headのように否定したものとそうでないものが混ざったルールは無効です。
例
- ||example.com^method=get|head
example.comへのGETとHEADリクエストのみブロックする - ||example.org^method=~post|~put
example.orgへのPOSTとPUTを除いたすべてのリクエストをブロックする
$to
指定されたドメインとそのサブドメインへのリクエストにルールの範囲を制限します。
一つのルールに複数のドメインを追加するには、区切り文字として「|」を使います。
$denyallowと併用して使用することは非推奨です
例
- /ads$to=evil.com|evil.org
/adsにマッチするパスを持つevil.comまたはevil.orgとそのサブドメインへのリクエストをブロックする - /ads$to=~not.evil.com|evil.org
not.evil.comとそのサブドメインへのリクエストを除き、/adsにマッチするパスを持つevil.orgとそのサブドメインへのリクエストをブロックする
$popup
指定されたページがポップアップ形式で(新しいタブやウィンドウで)開かれた場合、それを閉じます。
AdGuard for Safari/iOSではページが単に直ぐブロックされます。AdGuard for Windows/Mac/Androidでは検出できず、ブロックし切れない場合があります。
例
- ||example.net^$popup
任意のページからexample.netが新しいタブで開かれた*2時にその新たなタブが閉じられる - ||example.net^$popup,domain=example.com
example.comからexample.netが新しいタブで開かれた時にその新たなタブが閉じられる
$popunder
指定されたページがポップアンダー形式で(新しいタブやウィンドウを作って移動した後、元のタブで)開かれた場合、その元のタブを閉じます。
例
- ||example.org^$popunder
任意のページで新しいタブが開かれ、元のタブでexample.orgへ移動した時にその元のタブが閉じられる
$csp
対応するページのContent-Security-Policyを書き換えます。
引数には書き換えたいCSPのディレクティブとその値をスペースで繋げて書く必要があります。例外ルールの時は引数を省略できます。
例
- ||example.com/*$csp=script-src 'none'
example.comの全てのページでスクリプトを無効にする - @@||example.org/page/*$csp
example.com/page以下の全てのページでのCSPを書き換えを解除する
$permissions
対応するページのPermissions Policyを書き換えます。
複数個指定するときにAdGuardでは「\,」を、uBlock Originでは「|」を「,」の代わりに用います。
例
- ||example.org^$permissions=autoplay=()
example.orgのHTMLMediaElementインターフェイスを通じて要求されたメディアの自動再生を禁止する - @@||example.org/page/*$permissions
ルールパターンにマッチするすべてのページの$permissionsルールを無効にする - $domain=example.org|example.com,permissions=storage-access=()\, camera=()
example.orgとexample.com全体で、Storage Access APIを使用してパーティション分割されていないクッキーへのアクセスを要求することと、ビデオ入力デバイスを使用することを禁止します。
$redirect
ウェブリクエストを用意された別のローカルリソースにリダイレクトします。これはサイトにファイルはブロックされなかったと誤認させたりするために使用されます。
引数には必ず以下に定義されたものを使用しなければなりません。例外ルールの時は値を省略できます。
また、ublock Originでは他のネットワークルールよりも優先度が高く、たとえ$importantがあったとしても$redirectが優先されます。同じURLに対して例外ルールが定義されていた場合、$redirectに$importantがない限りリダイレクトは無効になります。$redirect同士での優先度を「:数値」の形で設定することも可能です*3。
$redirectに使用される引数は量が多いため抜粋しています。
名前 | エイリアス | 説明 |
---|---|---|
1x1-transparent.gif | 1x1.gif / 1x1-transparent-gif | 1×1(px)のgifファイルにリダイレクトする |
2x2-transparent.png | 2x2.png / 2x2-transparent-png | 2x2(px)のpngファイルにリダイレクトする |
3x2-transparent.png | 3x2.png / 3x2-transparent-png | 3x2(px)のpngファイルにリダイレクトする |
32x32-transparent.png | 32x32.png / 32x32-transparent-png | 32x32(px)のpngファイルにリダイレクトする |
noopframe | noop.html / blank-html | 何も表示しないHTMLファイルにリダイレクトする |
noopjs | noop.js / blank-js | 何も実行しないJava Scriptファイルにリダイレクトする |
nooptext | noop.txt / blank-text | 空のテキストファイルにリダイレクトする |
empty | nooptextと殆ど同じ意味を持つ | |
noopmp3-0.1s | noop-0.1s.mp3 / blank-mp3 | 0.1秒のMP3ファイルにリダイレクトする |
noopmp4-1s | noop-1s.mp4 / blank-mp4 | 1秒のMP4ファイルにリダイレクトする |
none | 特定の$redirectルールを無効化する*4 |
例
- ||example.org^$redirect=empty
example.orgとそのサブドメインのリクエストを全て空の応答へリダイレクトする - @@||example.org^$redirect
example.orgとそのサブドメインのリクエストをリダイレクトを解除する - ||example.com/*.js$1p,script,redirect=noopjs:100
example.comとそのサブドメインで、拡張子が .js のスクリプトファイルを空のJavaScriptファイルへリダイレクトする
このルールの優先度を100にする(AdGuardでは意味無し)
$redirect-rule
$redirectとほぼ同じ意味ですが、$redirectと違いブロックが一緒に行われないため、他のネットワークルールでブロックされた時のみリダイレクトが行われます。
例
- ||example.com/script.js
||example.com^$redirect-rule=noopjs
example.com/script.jsのみブロックとリダイレクトが行われ、それ以外のexample.comのリクエストには何もされない
$removeparam
URLからクエリ文字列を取り除きます。
構文
- $removeparam
全てのクエリ文字列を削除する - $removeparam=パラメータ
「パラメータ」に指定された名前のクエリ文字列を削除する
「|」で複数の指定「~」で除外ができる - $removeparam=/正規表現/[オプション]
正規表現に一致するクエリ文字列を削除する
上の構文と同じで「|」で複数の指定「~」で除外ができる
ただし、上の構文とは異なり、クエリ文字列が「クエリ文字列の名前=クエリ文字列の値」の形に正規化される*5
オプションには大文字と小文字を区別しないという意味の「i」のみが使用できる
/ と $ と , を \ でエスケープする必要があります
例
- ||example.com^$removeparam=param
名前が param のクエリ文字列を削除する
例えばhttp://example.com/page?param=1&another=2がhttp://example.com/page?another=2に変わる - $removeparam=utm_source|utm_content
@@||example.com^$removeparam
utm_source と utm_content を任意のリクエストから取り除く(ただし example.com は例外)
例えばhttp://google.com/page?utm_source=s&utm_content=imgはhttp://google.com/pageに変わるがhttp://example.com/page?utm_source=s&utm_content=imgには影響がない - $removeparam=/^utm_.*/
utm_ から始まるクエリ文字列を全て取り除く
_
何も行いません。これはルールの可読性を高める為に使用されます。
例
- /ad-$removeparam=/^ss$/
これは本来は「/ad-」と「$removeparam=/^ss$/」と分けられるが、全体が「/」で囲われた正規表現のようにも解釈できる。
その為、/ad-$removeparam=/^ss$/,_とすることで明示的に$以下が修飾子の塊であると示せる。
$cookie
クッキーの削除もしくは改変を行います。
構文
- $cookie
全てのクッキーを削除する - $cookie=パラメータ
「パラメータ」に指定された名前のクッキーを削除する - $cookie=/正規表現/
正規表現に一致するクッキーを全て削除する
$ と , を \ でエスケープする必要があります。
また上の構文にmaxAge属性とsameSite属性を追加してクッキーの削除ではなく中身の変更をすることもできます。
例
- ||example.com^$cookie
クッキーを全て削除する - @@||example.org^$cookie=foo
fooという名前のクッキーの削除を解除する - ||example.net^$cookie=/b[a-z]r/;maxAge=3600;sameSite=lax
barやbzrなどの名前のクッキーの有効期間を3600秒までにし、SameSiteをlaxにする
$removeheader
特定のレスポンスヘッダを削除します。
セキュリティ上の理由から一部のヘッダは削除できません。
access-control-allow-origin、access-control-allow-credentials、access-control-allow-headers、access-control-allow-methods、access-control-expose-headers、access-control-max-age、access-control-request-headers、access-control-request-method、origin、timing-allow-origin、allow、cross-origin-embedder-policy、cross-origin-opener-policy、cross-origin-resource-policy、content-security-policy、content-security-policy-report-only、expect-ct、feature-policy、origin-isolation、strict-transport-security、upgrade-insecure-requests、x-content-type-options、x-download-options、x-frame-options、x-permitted-cross-domain-policies、x-powered-by、x-xss-protection、public-key-pins、public-key-pins-report-only、sec-websocket-key、sec-websocket-extensions、sec-websocket-accept、sec-websocket-protocol、sec-websocket-version、p3p、sec-fetch-mode、sec-fetch-dest、sec-fetch-site、sec-fetch-user、referrer-policy、content-type、content-length、accept、accept-encoding、host、connection、transfer-encoding、upgrade
構文
- $removeheader=パラメータ
パラメータという名前のレスポンスヘッダを削除する - $removeheader=request:パラメータ
パラメータという名前のリクエストヘッダを削除する
例
- ||example.com^$removeheader=request:x-client-data
X-Client-Dataリクエストヘッダを削除する - @@||example.com/path/$removeheader
example.comとそのサブドメインのpath以下でレスポンスヘッダの削除を無効にする
$replace
リクエストをブロックするのではなく応答の中身を一部置き換えます。
テキストにのみ適用され、バイナリ(media、imageなど)には適用されません。3MBを超えるサイズのリクエストにも適用されません。
また他のネットワークルールよりも優先度が高いです。
構文
- $replace=/正規表現/置換文字列/[オプション]
- 正規表現
置き換えるパターンを表した正規表現 - 置換文字列
正規表現に対応する文字列から置き換えられる文字列 - オプション
正規表現のオプション(例えば「i」は大文字と小文字を区別しないなど)
- 正規表現
この正規表現の構文はPerlのものと酷似しています。, と $ は \ で エスケープしなければなりません。
例
- ||example.org^$replace=/(<VAST[\s\S]*?>)[\s\S]*<\/VAST>/\$1<\/VAST>/i
正規表現は「<VAST[\s\S]*?>)[\s\S]*<\/VAST>」、置換文字列は「\$1<\/VAST>」、オプションは「i」 - @@||example.org^$replace
example.orgとそのサブドメインの全ての$replaceを無効化する
$referrerpolicy
Referrer-Policyを上書きします。
例
- ||example.com^$referrerpolicy=unsafe-url
example.comのリファラポリシーをunsafe-urlで上書きする
$app
ルールの適用範囲を特定のアプリに限定します。
Windowsはプロセス名(chrome.exeなど)、MacはバンドルIDかプロセス名(com.google.Chromeなど)、Androidはパッケージ名(com.android.chromeなど)が引数として取れます。
複数のアプリを指定する場合は「|」、除外には「~」が使用できます。
例
- ||example.com^$app=foo.exe
foo.exeから送信されたexample.comとそのサブドメインのリクエストをブロックする - ||example.com^$app=~org.example.foo|~com.example.bar
org.example.fooとcom.example.bar以外から送信されたexample.comとそのサブドメインのリクエストをブロックする
$network
URLなどではなくIPアドレスでブロックする対象を決められるようにします。
使用できる形式としてIpV4とIpV6がありますが、IpV6で書く場合 [] で囲んだ上で、省略された記法を使用する必要があります。
ポート番号も一緒に使用できる他、/で囲んで正規表現も利用できます。
例
- 174.129.166.49:334^$network
IPアドレスが174.129.166.49でポート番号が334のアクセスを完全にブロックする - @@[2001:db8:a1::1234]^$network
IPアドレスが2001:db8:a1::1234のアクセスのブロックを完全に解除する - /8.8.8.(:?8|4)/$network
IPアドレスが8.8.8.8または8.8.8.4のアクセスを完全にブロックする
$hls
マッチしたリクエストのレスポンスを変更します。これは、HLS プレイリスト (RFC 8216)からセグメントを削除するための便利な方法です。
例
- ||example.org^$hls=\/videoplayback^?*&source=dclk_video_ads
パターンに一致するURLを持つすべてのセグメントを削除します。 - @@||example.org^$hls
||example.org^にマッチするURLからのレスポンスに対する$hlsルールをすべて無効にします。
$jsonprune
修正されたJSONPath式に一致するJSON項目を削除することで、一致するリクエストに対するレスポンスを修正します。有効なJSONドキュメントではないレスポンスを変更することはありません。
例
- ||example.org^$jsonprune=\$.a[?(has ad_origin)]
「ad_origin」キーを持つ「a」の子をすべて削除する。
$empty
「$redirect=nooptext」を代わりに使用してください。
通常、ブロックされたリクエストはブラウザ上ではサーバーエラーのような扱いになりますが、この修飾子がある場合、200 OK ステータス付きの空の応答にリダイレクトします。
$mp4
「$redirect=noopmp4-1s」を代わりに使用してください。
リクエストをブロックし、代わりとして短いプレースホルダー用の動画にリダイレクトします。
コメント
感嘆符(!)で始まる行は全てコメントです。広告ブロッカーはフィルタ中のコメントを無視するため、自由に文章を書くことができます。これは通常、ルールの意図の説明や一時的に任意のルールを無効化するコメントアウトに使用されます。
例
! これはコメントです。下のルールはexample.netとそのサブドメインをブロックするルールです。
||example.net^
特殊コメント
特殊コメントは通常のコメントと違い、広告ブロッカーに無視されず、フィルタの名前などのメタデータを設定できる特別なルールです。
! Homepage:
フィルタのホームページとして登録するURLを設定します。
! Title:
フィルタの名前を設定します。
! Expires:
フィルタの更新頻度を設定します。
単位は「days」(日)か「hours」(時間)が指定できます。uBlock Originの場合hoursはdaysに切り下げられます(例:28 hours→2days)。
! Version:
フィルタのバージョンを設定します。uBlock Originでは使用されません。
前処理指令
前処理指令(プリプロセッサディレクティブ)はフィルタの保守性や広告ブロッカー同士の互換性の向上などを目的とした「!#」から始まる特別な命令です。特殊コメントとの機能的な違いは、特殊コメントはあくまでもフィルタの補足を行うのに対し、前処理指令はフィルタリング内容そのもの変更する点です。
!#include
!#includeは指定されたファイルをフィルタにインクルードします。サブリストの管理などをより円滑に行うことができます。
uBlock Originの場合、カレントディレクトリ内のファイルのみ指定できます。AdGuardの場合、カレントディレクトリに限らず同じオリジンのファイルなら全てのファイルが指定できます。
例(フィルタURLが "https://example.org/filters/adblock.txt" の場合)
! uBlock Origin、AdGuardの両方で有効なルール
!#include adblock-sub.txt
!#include annoyances/popup.txt
! AdGuardでのみ有効なルール
!#include ../filters2/adblock.txt
!#include https://example.org/filters/adblock-sub2.txt
! 無効なルール
!#include https://wikiwiki.jp/filters/adblock.txt
!#if
!#ifの指定された条件がtrueの場合は!#endifまでのルールが実行され、falseの場合は実行されません(正確には構文解析そのものが行われない)。!#ifは必ず!#endifと対で使用する必要があります。
uBlock Originの場合、「!」(論理否定)を除く基本的な否定演算子を使用することができず、括弧でくくることができません。AdGuardの場合、どちらも使用できます。
名前 | uBlock Originの返り値 | AdGuardの返り値 |
---|---|---|
ext_abp | false | false |
ext_ublock | true | false |
env_chromium | Chromium系→true | false |
env_firefox | Firefox→true | false |
env_edge | Edge Legacy→true | false |
env_mobile | モバイル環境→true | false |
env_safari | Safari→true | false |
false | false | false |
cap_html_filtering | HTMLフィルタリングサポート済→true | false |
cap_user_stylesheet | tabs.insertCSSサポート済*6→true | false |
adguard | false | true |
adguard_app_windows | false | AdGuard for Windows→true |
adguard_app_mac | false | AdGuard for Mac→true |
adguard_app_android | false | AdGuard for Android→true |
adguard_app_ios | false | AdGuard for iOS→true |
adguard_ext_safari | false | AdGuard for Safari→true |
adguard_ext_chromium | Chromium系→true | AdGuard for Chrome→true |
adguard_ext_firefox | Firefox→true | AdGuard for Firefox→true |
adguard_ext_edge | Edge Legacy→true | AdGuard for Edge→true |
adguard_ext_opera | Chromium系→true | AdGuard for Opera→true |
adguard_ext_android_cb | false | AdGuard コンテンツブロッカー→true |
例
! AdGuard限定ルール
!#if adguard
||example.net^$popup,document
!#endif
! uBlock Origin限定ルール
!#if ext_ublock
||example.net^$all
!#endif
応用(拡張ルール)
ネットワークのリクエスト(要求)をブロックする基本的なルールだけでは広告ブロックに不十分な場合があります。ネットワークルールでは対応しきれない広告などをブロックするのが拡張ルールです。
区分 | AdGuard for Windows, Mac, Android | AdGuard for Chromium | AdGuard for Firefox | AdGuard for iOS | AdGuard for Safari | AdGuardコンテンツブロッカー | uBlock Origin for Chromium | uBlock Origin for Firefox |
---|---|---|---|---|---|---|---|---|
要素非表示ルール | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
CSSルール | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
拡張CSSセレクター | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
HTMLフィルタリングルール | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
JavaScriptルール | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
Scriptletルール | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
特殊記号
拡張ルールではネットワークルールの特殊記号や正規表現を使ったドメインの指定ができません。
その代わりに拡張ルールでは複数のドメインを指定する場合に「|」指定のドメインを除外したい場合に「~」eTLDや汎用整形ルールで「*」(ワイルドカード)が使用できます。つまり、基本的には$domainと似た構文です。
なお、AdGuard for Safariではドメインの指定と除外の両方をサポートされていないため example.org,~foo.example.org##.textad のようなルールは無効になります。
eTLDにおけるワイルドカード
拡張ルールと$domainではeTLD(Public Suffix)でワイルドカードが使用できます。
例えば、google.*###banners は google.com / google.co.jp / google.com.hk / google.cn などのサイトに適用されますが google.example.com には適用されません。.comや.co.jpなどはeTLDですが.example.comはeTLDではないからです。
修飾子
ルール = "[$" 修飾子群 "]" [ルール本文]
修飾子群 = 修飾子0[, 修飾子1[, ...[, 修飾子N]]]
- ルール本文
- 修飾子を適用するルールの本文
- 修飾子
- 以下の修飾子を使える
修飾子内では [ と ] と , と \ を \ でエスケープする必要があります。
修飾子 | AdGuard for Windows, Mac, Android | AdGuard for Chromium | AdGuard for Firefox | AdGuard for iOS | AdGuard for Safari | AdGuardコンテンツブロッカー | uBlock Origin for Chromium | uBlock Origin for Firefox |
---|---|---|---|---|---|---|---|---|
$app | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
$domain | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
$path | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
$url | ✅ | ⏳ | ⏳ | ❌ | ❌ | ❌ | ❌ | ❌ |
$app
基本の$appと構文や動作は同じで、ルールの適用範囲を特定のアプリに限定します。
例
- [$app=org.example.app]example.com##.textad
classがtextadの要素をorg.example.appでのみ非表示にする
$domain
基本の$domainと構文や動作は同じで、指定のドメインかそのサブドメインのみ、ルールを適用するように制限します。ただし正規表現を使用する場合でも | をエスケープする必要がないという違いがあります。
また拡張ルールのドメインとこの修飾子が混ざるルールは無効です。
例
- [$domain=example.com]##.textad
classがtextadの要素をexample.comとそのサブドメインでのみ非表示にする - [$domain=/(^|.+\.)example\.(com|org)\$/]##.textad
classがtextadの要素をexample.comとexample.orgとそれらのサブドメインでのみ非表示にする - [$domain=example.org]example.com##.textad
無効なルール
$path
指定のパスにあるページにのみ、ルールを適用するように制限します。||を除いた特殊記号と正規表現が使用できます。
例
- [$domain=example.com,path=page.html]##.textad
example.com/page.html や example.com/foo_page.html などで非表示にする - [$path=/page.html]example.org##.textad
example.org/foo_page.html などを除いた example.org/page.html などで非表示にする - [$path=/\\/(sub1|sub2)\\/page\\.html/]##.textad
/sub1/page.html や /sub2/page.html で非表示にする
$url
指定のURLにのみ、ルールを適用するように制限します。特殊記号と正規表現が使用できます。
- [$url=||example.com/pages/*]##.textad
https://example.com/pages/foo.html などで非表示にする - [$url=/^https?:\/\/\[a-z\]+\\.example\\.com/index.html$]##.textad
https://aaa.example.com/ などで非表示にする
整形ルール | Cosmetic rules
汎用整形ルール
整形ルールは特定のドメインによって制限されない汎用整形ルールを作成できます。
###banner
*###banner
#@#.adsblock
*#@#.adsblock
~example.org###banner
上のようにドメインを指定する位置に「~」付きのドメインを除いて何もないか、ワイルドカードのみがあるルールのことを汎用(拡張)ルールと呼びます。
AdGuardの場合、 ###banner と *###banner は同じ意味ですが、uBlock Originの場合は動作が異なります。
左のルールはuBlock OriginのDOM解析でページ中に一致する(この場合は"banner"というidを持つ)要素を見つけた場合にのみルールが挿入されます。
一方、右のルールは specific-generic といってDOM解析に関わらず全てのページに挿入され、DOM解析を行わないことで負荷を減らす「汎用整形フィルターを無視する」というuBlock Originの設定にチェックが付いていても無効化されない特別な汎用整形ルールです。$generichideは双方とも無効化します。
要素非表示ルール
ルール = [ドメイン群] "##" セレクタ
ドメイン群 = [ドメイン0, ドメイン1[, ...[, ドメインN]]]
ウェブサイトの要素(Element)を非表示にします。
CSSで { display: none; } を適用するのに似ています。
例
- example.com,example.org###adspace
example.comとexample.orgとそれらのサブドメインでidがadspaceの要素を非表示にする - example.*,~example.org##.adtext
example.orgを除いたexample.comやexample.netなどとそれらのサブドメインでclassがadtextの要素を全て非表示にする - #@#.foo
全てのサイトでclassがfooの要素の非表示を解除する
CSSルール
ルール = [ドメイン群] "#$#" セレクタ "{" スタイル "}"
- 例外
- #$#を#@$#に変更する
- ドメイン群
- ルールを適用するドメイン
使える機能は要素非表示ルールと同じ - セレクター
- 非表示にする要素を設定するCSSセレクター
- スタイル
- 宣言ブロックで定義された要素に適用するスタイル
要素を非表示にするのではなくCSSを適用して要素のスタイル(見た目)を変更します。
例
- example.net#$#body { background-color: #FFF!important; }
example.comとexample.orgとそれらのサブドメインで<body>要素に { background-color: #FFF!important; } を適用する
拡張CSSセレクター
CSSはidやclassなど様々な属性を基にスタイルを適用する要素を定義できますが、広告ブロックには不十分なことがあります。そこでCSSの機能の一つである擬似クラスを広告ブロッカーが独自に追加したものが拡張CSSセレクターです。
要素非表示ルールやCSSルールのセレクターに使用しますが、その際「##」や「#$#」の代わりに「#?#」や「#$?#」(例外の場合は「#@?#」や「#@$?#」)を置くことができます。動作は基本的には変わりませんがAdGuardでは代置することが強く推奨されています。
:has()
uBlock Origin | ○ | AdGuard | ○ |
---|
エイリアス: :-abp-has(uBlock Origin:× AdGuard:○) :if(uBlock Origin:× AdGuard:○)
引数として渡されたセレクターに該当する要素を一つ以上持つ要素を探します。
例
- example.com#$?#div:has(img[alt="AdBlock Alert"]) {display: none!important;}
example.comとそのサブドメインでalt属性が"AdBlock Alert"の<img>要素を持つ<div>要素に {display: none!important;} を適用する
:contains()
uBlock Origin | ○ | AdGuard | ○ |
---|
エイリアス: :-abp-contains(uBlock Origin:× AdGuard:○) :has-text(uBlock Origin:○ AdGuard:○)
引数として渡された文字列リテラルに含まれるもしくは正規表現にマッチする文字列を持つ要素を探します。
例
- example.com#?#span:contains(Promotion)
example.comとそのサブドメインで"Promotion"という文をどこかに含む<span>要素を非表示にする
:not()
uBlock Origin | ○ | AdGuard | ○ |
---|
引数として渡されたセレクターの否定に該当する要素を探します。既存の:not()擬似クラスとほとんど同じですが、他の拡張セレクターをセレクターとして使えるという特徴を持ちます。
例
- example.com#?#div:not(:contains(foo))
example.comとそのサブドメインで"foo"という文字列を持たない<div>要素を非表示にする
:matches-css()
uBlock Origin | ○ | AdGuard | ○ |
---|
引数として渡されたスタイルを持つ要素を探します。
引数は「プロパティ名 : 値」の形で渡す必要があり、値には文字列の他に / で囲って正規表現が使用できます。正規表現では " と \ を \ でエスケープする必要があります。
例
- example.com#?#div:matches-css(position: absolute)
example.comとそのサブドメインでスタイルが { position: absolute; } である<div>要素を非表示にする
:matches-css-before()
uBlock Origin | ○ | AdGuard | ○ |
---|
::before疑似要素に対して:matches-css()を行います。
:matches-css-after()
uBlock Origin | ○ | AdGuard | ○ |
---|
::after疑似要素に対して:matches-css()を行います。
:matches-media()
uBlock Origin | ○ | AdGuard | × |
---|
@media(メディアクエリ)によって適用する整形ルールを制限します。これはAdGuardにおける #$#@meida に相当します。
例
- example.com#?#div:matches-media((min-width: 800px))
example.comとそのサブドメインでスクリーンサイズの幅(width)が800px以上である時、<div>要素を非表示にする
AdGuardでは example.com#$#@media(min-width: 800px) {div {display: none;}} に相当
:matches-path()
uBlock Origin | ○ | AdGuard | × |
---|
整形ルールを適用するページを引数に基づいて制限します。これはAdGuardにおける$pathに相当します。
引数はパスとクエリーのテキスト、又は正規表現を取ることができます。
例
- example.com##:matches-path(/shop) #pr
example.comとそのサブドメインでURLのディレクトリやファイル名にshopから始まる文字列が含まれる(/shop/index.html や /shopping.html など)時、idがprの要素を非表示にする
AdGuardでは [$path=/shop]example.com###pr に相当 - example.org##:matches-path(/^/$/) span
example.orgとそのサブドメインのトップページで<span>要素を非表示にする
:watch-attr()
uBlock Origin | ○ | AdGuard | × |
---|
対象の要素の一つ以上の属性が変わった時、このルールの再評価が行われるようにします。
引数は監視する属性のリストを取ることができます。引数に何も渡さなかった場合、要素の全ての属性を監視します。
通常、uBlock Originでは性能の観点からサブツリー内の、つまり子要素の変更(追加、削除)があった時のみ整形ルールの再評価を行い、属性の変更を監視しません。
例
- ameshkov.github.io###testdiv:watch-attr(id):has(p)
ameshkov.github.ioでidがtestdivで<p>要素を持つ要素を非表示にし、この要素のidが変更された時に再評価を行う
:matches-attr()
uBlock Origin | ○ | AdGuard | ○ |
---|
引数に基づいた属性を持つ要素を探します。これは特に属性がランダムに生成される場合に使用できます。
引数は「"属性名"="値"」の形で渡す必要があり、属性名と値には文字列の他に / で囲って正規表現が使用できます。値は省略可能で「"属性名"」だけの形でも可です。正規表現では " と \ を \ でエスケープする必要があります。
例
- example.com##div:matches-attr("/-link/")
example.comとそのサブドメインで「-link」という文字列を含む属性名を持つ<div>要素を非表示にする(<div hsd4jkf-link="foo"></div>など) - example.org##button:matches-attr("class"="/[\w]{7}/")
example.orgとそのサブドメインでclassに任意の7文字の英数字から構成される値を持つ<button>要素を非表示にする(<button class="baZaR"></button>など)
:matches-property()
uBlock Origin | × | AdGuard | ○ |
---|
引数に基づいたDOMプロパティを持つ要素を探します。
引数は「"プロパティ"="値"」の形で渡す必要があり、プロパティと値には文字列の他に / で囲って正規表現が使用できます。値は省略可能で「"プロパティ"」だけの形でも可です。正規表現では " と \ を \ でエスケープする必要があります。
例
- example.com##div:matches-property("foo./[a-z]{5}/")
example.comとそのサブドメインで { foo: { qwert: true, bar: false } } や { foo: { poiuy: false } } といったプロパティをもつ<div>要素を非表示にする - example.org##div:matches-attr("baz.src"="/ad|null/")
example.orgとそのサブドメインで { baz: { src: 'ad.example' } } や { baz: { src: null } } といったプロパティをもつ<div>要素を非表示にする
classに任意の7文字の英数字から構成される値を持つ<button>要素を非表示にする
:min-text-length()
uBlock Origin | ○ | AdGuard | × |
---|
引数として渡された自然数N個以上の文字数のあるテキストを持つ要素を探します。
例
- example.com##span:min-text-length(35000))
example.comとそのサブドメインで文字数35000個以上のテキストを持つ<span>要素を非表示にする
正規表現のexample.com##span:has-text(/[\w\W]{35000}/)に相当
:others()
uBlock Origin | ○ | AdGuard | × |
---|
対象の要素を除く、全ての要素を対象にします。
例
- example.com##p[id=foo]:others()
example.comとそのサブドメインでidがfooの<p>要素を除く全ての要素を非表示にする
:upward()
uBlock Origin | ○ | AdGuard | ○ |
---|
引数に沿ったセレクターの先祖要素を探します。引数は1以上256未満の整数、又はCSSセレクターを取ることができます。
引数に整数が渡された場合はN個分の上位の階層の先祖要素に、引数にCSSセレクターが渡された場合はそのセレクターに該当する最も近い先祖要素に一致します。
例
- example.net#?#div:upward(2)
example.netとそのサブドメインで<div>要素の2個分上の先祖要素を非表示にする
example.net#?#div:xpath(../..) に相当 - example.org#?#p:contains(foo):upward(div[id^=adspace])
example.orgとそのサブドメインで"foo"という文字列を持つ<p>要素の先祖要素で、idがadspaceから始まる<div>要素を非表示にする
:nth-ancestor()
uBlock Origin | ○*7 | AdGuard | ○ |
---|
:upward()とほとんど同じ動作ですが、AdGuardの場合は数値しか取れません。
:xpath()
uBlock Origin | ○ | AdGuard | ○ |
---|
引数として渡されたXPath式の評価に合う要素を探します。他の拡張セレクターと違い前に基本となるセレクターがなくとも(#?#:xpath()の形でも)動作します。
例
- example.com#?#div:has(#foo):xpath(../.)
example.comとそのサブドメインでidがfooの<div>要素の親要素を非表示にする - example.org#?#:xpath(//div[@id="bar"]/div[starts-with(@id,"ad_id")]/p)
example.orgとそのサブドメインで指定のXPathの要素を非表示にする
:remove-attr()
uBlock Origin | ○ | AdGuard | × |
---|
引数として渡された文字列リテラルに含まれるもしくは正規表現にマッチする属性を対象の要素から削除します。
例
- example.com##button[onclick]:remove-attr(onclick)
onclick属性をもつ<button>要素からonclick属性を削除する
:remove-class()
uBlock Origin | ○ | AdGuard | × |
---|
引数として渡された文字列リテラルに含まれるもしくは正規表現にマッチするクラスを対象の要素から削除します。
例
- example.com###foo:remove-class(bar)
idがfoo要素からclassのbarを削除する
:style()
uBlock Origin | ○ | AdGuard | ○ |
---|
引数として渡されたCSSを適用して要素のスタイル(見た目)を変更します。これはセレクターの末尾に置かなれけばなりません。
処理はCSSルールと全く同じです。
例
- example.org##h1:style(background-color: blue !important)
example.orgとそのサブドメインでh1タグに{ background-color: blue !important }を適用する
example.org#$#h1 { background-color: blue !important; } に相当
:remove() / remove
uBlock Origin | ○ | AdGuard | ○ |
---|
対象の要素を隠す代わりに削除します。これはセレクターの末尾に置かなれけばなりません。
また擬似クラスではなく疑似プロパティ { remove: true; } も使用できます。
例
- example.com#?#p:upward(1):remove()
example.comとそのサブドメインでidがfooの<div>要素の親要素を非表示にする
example.com#$?#p:upward(1) { remove: true; } に相当
HTMLフィルタリングルール
ブラウザに解析される前のHTMLの応答データから要素を削除します。uBlock OriginとAdGuardで構文が異なり、互換性がありません。
uBlock Origin
ルール = [ドメイン群] "##^" セレクタ
- 例外
- ##^を#@#^に変更する
- ドメイン群
- ルールを適用するドメイン
使える機能は要素非表示ルールと同じ - セレクター
- 要素を設定するCSSセレクター
##^responseheader()でレスポンスヘッダを削除することもできます。これはAdGuardにおける$removeheaderに相当します。
削除できるヘッダは location と refresh と report-to と set-cookie だけです。
AdGuard
ルール = [ドメイン群] "$$" セレクタ
- 例外
- $$を$@$に変更する
- ドメイン群
- ルールを適用するドメイン
使える機能は要素非表示ルールと同じ - セレクタ
- 要素を設定するCSSセレクター
ただし指定できるのは限定的で>コンビネータと属性と疑似クラスのみです
擬似属性
- tag-content
innerHTMLに指定の文字列がどこかに含まれているものを対象にします
" は "" にエスケープする必要があります - wildcard
検索条件に沿ってtag-contentのようにコンテンツの中身(innerHTML)を検査します
" は "" にエスケープする必要があります - max-length
コンテンツの長さの最大値を設定します
このパラーメータを指定しなかった時のデフォルト値は8192です - min-length
コンテンツの長さの最小値を設定します
擬似クラス
- contains
引数として渡された文字列リテラルに含まれるもしくは正規表現にマッチする文字列を持つ要素を探します。
JavaScriptルール
ウェブサイトに任意のスクリプトを挿入します。
ルール = [ドメイン群] "#%#" スクリプト
- 例外
- #%#を#@%#に変更する
- ドメイン群
- ルールを適用するドメイン
使える機能は要素非表示ルールと同じ - スクリプト
- 一行にまとめられた任意のJavaScriptのコード
デバッグなどの用途には適していますが、基本的にはJavaScriptルールではなくScriptletルールを使うことが強く推奨されています。
信頼されたフィルタでないと使えません。
例
- example.com#%#window.__gaq = undefined;
example.comとそのサブドメインで window.__gaq に undefined を代入する - example.org#@%#console.log("SAMPLE");
example.orgとそのサブドメインで"SAMPLE"をログに出力しない
Scriptletルール
アドブロックのために提供された特定のスクリプトを挿入することがきます。uBlock OriginとAdGuardで構文が異なりますが、互換性があります。
スクリプトレットは量が多いため抜粋しています。
uBlock Origin | AdGuard | 説明 |
---|---|---|
acs / abort-current-script / acis / abort-current-inline-script | abort-current-inline-script | 引数にそってインラインスクリプトの実行を中断する |
aopr / abort-on-property-read | abort-on-property-read | 引数で指定されたプロパティを読み込もうとした時スクリプトの実行を中断する |
aopw / abort-on-property-write | abort-on-property-write | 引数で指定されたプロパティに書き込もうとした時スクリプトの実行を中断する |
nano-sib / nano-setInterval-booster | adjust-setInterval | setInterval()の遅延を調整する |
nano-stb / nano-setTimeout-booster | adjust-setTimeout | setTimeout()の遅延を調整する |
nowebrtc | RTCPeerConnectionを上書きしてWebRTCを無効にする | |
nosiif / no-setInterval | prevent-setInterval | 引数にそってsetInterval()を中断する |
nostif / no-setTimeout-if / setTimeout-defuser | prevent-setTimeout | 引数にそってsetTimeout()を中断する |
ra / remove-attr(非推奨) | remove-attr | 引数に沿ってDOMの属性を削除する |
rc / remove-class(非推奨) | remove-class | 引数に沿ってDOMのクラスを削除する |
set / set-constant | set-constant | 引数にそってプロパティを作成し、値を振り当てる |
uBlock Origin
ルール = [ドメイン群] "##+js(" スクリプトレット名, 引数 ")"
- 例外
- ##+jsを#@#+jsに変更する
- ドメイン群
- ルールを適用するドメイン
使える機能は要素非表示ルールと同じ - スクリプトレット
- 使用するスクリプトレットの名前
- 引数
- 使用するスクリプトレットに対応する引数(ない場合もある)
AdGuard
ルール = [ドメイン群] "#%#//scriptlet(" スクリプトレット名, 引数 ")"
- ドメイン群
- ルールを適用するドメイン
使える機能は要素非表示ルールと同じ - スクリプトレット名
- 使用するスクリプトレットの名前
- 引数
- 使用するスクリプトレットに対応する引数(ない場合もある)
String以外の引数は渡せない
不具合等発生時には、「コメント欄」ではなく「不具合・広告相談所」に書き込んでください。
また、消えない広告については消えない広告の報告をご参照ください。
:style()の説明文がおかしいので前後の:remove-class() :style() :remove() / removeも含めて確認お願いいたします -- 2024-02-22 (木) 04:16:42