フィルタ構文

Last-modified: 2024-07-16 (火) 17:03:37

ここではAdblock PlusやuBlock OriginやAdGuardなどの主要な広告ブロッカーのフィルタの構文、ルールについて解説します。
このページは各種広告ブロッカーのヘルプページやWikiを参考に作成されています。


基本(ネットワークルール)

構文(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, AndroidAdGuard for ChromiumAdGuard for FirefoxAdGuard for iOSAdGuard for SafariAdGuardコンテンツブロッカーuBlock Origin for ChromiumuBlock 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リクエスト(XMLHttpRequestFetch 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による”弱い”サードパーティの一致ではなく、より厳密なサードパーティの一致を行うことができます。
これは送信元(コンテキスト)と要求先(リクエストドメイン)が少しでも異なればサードパーティ扱いされるということです。

送信元要求先3pstrict3p
www.example.orgwww.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.gif1x1.gif / 1x1-transparent-gif1×1(px)のgifファイルにリダイレクトする
2x2-transparent.png2x2.png / 2x2-transparent-png2x2(px)のpngファイルにリダイレクトする
3x2-transparent.png3x2.png / 3x2-transparent-png3x2(px)のpngファイルにリダイレクトする
32x32-transparent.png32x32.png / 32x32-transparent-png32x32(px)のpngファイルにリダイレクトする
noopframenoop.html / blank-html何も表示しないHTMLファイルにリダイレクトする
noopjsnoop.js / blank-js何も実行しないJava Scriptファイルにリダイレクトする
nooptextnoop.txt / blank-text空のテキストファイルにリダイレクトする
emptynooptextと殆ど同じ意味を持つ
noopmp3-0.1snoop-0.1s.mp3 / blank-mp30.1秒のMP3ファイルにリダイレクトする
noopmp4-1snoop-1s.mp4 / blank-mp41秒の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

リクエストをブロックするのではなく応答の中身を一部置き換えます。
テキストにのみ適用され、バイナリ(mediaimageなど)には適用されません。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_abpfalsefalse
ext_ublocktruefalse
env_chromiumChromium系→truefalse
env_firefoxFirefox→truefalse
env_edgeEdge Legacy→truefalse
env_mobileモバイル環境→truefalse
env_safariSafari→truefalse
falsefalsefalse
cap_html_filteringHTMLフィルタリングサポート済→truefalse
cap_user_stylesheettabs.insertCSSサポート済*6→truefalse
adguardfalsetrue
adguard_app_windowsfalseAdGuard for Windows→true
adguard_app_macfalseAdGuard for Mac→true
adguard_app_androidfalseAdGuard for Android→true
adguard_app_iosfalseAdGuard for iOS→true
adguard_ext_safarifalseAdGuard for Safari→true
adguard_ext_chromiumChromium系→trueAdGuard for Chrome→true
adguard_ext_firefoxFirefox→trueAdGuard for Firefox→true
adguard_ext_edgeEdge Legacy→trueAdGuard for Edge→true
adguard_ext_operaChromium系→trueAdGuard for Opera→true
adguard_ext_android_cbfalseAdGuard コンテンツブロッカー→true

! AdGuard限定ルール
!#if adguard
||example.net^$popup,document
!#endif
! uBlock Origin限定ルール
!#if ext_ublock
||example.net^$all
!#endif

応用(拡張ルール)

ネットワークのリクエスト(要求)をブロックする基本的なルールだけでは広告ブロックに不十分な場合があります。ネットワークルールでは対応しきれない広告などをブロックするのが拡張ルールです。

区分AdGuard for Windows, Mac, AndroidAdGuard for ChromiumAdGuard for FirefoxAdGuard for iOSAdGuard for SafariAdGuardコンテンツブロッカーuBlock Origin for ChromiumuBlock 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, AndroidAdGuard for ChromiumAdGuard for FirefoxAdGuard for iOSAdGuard for SafariAdGuardコンテンツブロッカーuBlock Origin for ChromiumuBlock 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]]]

例外
##を#@#に変更する
セレクター
非表示にする要素を設定するCSSセレクター
ドメイン
ルールを適用するドメイン
ドメインを除外するには「~」、eTLDで「*」が使用できる

ウェブサイトの要素(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 OriginAdGuard

エイリアス: :-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 OriginAdGuard

エイリアス: :-abp-contains(uBlock Origin:× AdGuard:○) :has-text(uBlock Origin:○ AdGuard:○)

引数として渡された文字列リテラルに含まれるもしくは正規表現にマッチする文字列を持つ要素を探します。

  • example.com#?#span:contains(Promotion)
    example.comとそのサブドメインで"Promotion"という文をどこかに含む<span>要素を非表示にする

:not()

uBlock OriginAdGuard

引数として渡されたセレクターの否定に該当する要素を探します。既存の:not()擬似クラスとほとんど同じですが、他の拡張セレクターをセレクターとして使えるという特徴を持ちます。

  • example.com#?#div:not(:contains(foo))
    example.comとそのサブドメインで"foo"という文字列を持たない<div>要素を非表示にする

:matches-css()

uBlock OriginAdGuard

引数として渡されたスタイルを持つ要素を探します。
引数は「プロパティ名 : 値」の形で渡す必要があり、値には文字列の他に / で囲って正規表現が使用できます。正規表現では " と \ を \ でエスケープする必要があります。

  • example.com#?#div:matches-css(position: absolute)
    example.comとそのサブドメインでスタイルが { position: absolute; } である<div>要素を非表示にする

:matches-css-before()

uBlock OriginAdGuard

::before疑似要素に対して:matches-css()を行います。

:matches-css-after()

uBlock OriginAdGuard

::after疑似要素に対して:matches-css()を行います。

:matches-media()

uBlock OriginAdGuard×

@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 OriginAdGuard×

整形ルールを適用するページを引数に基づいて制限します。これは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 OriginAdGuard×

対象の要素の一つ以上の属性が変わった時、このルールの再評価が行われるようにします。
引数は監視する属性のリストを取ることができます。引数に何も渡さなかった場合、要素の全ての属性を監視します。
通常、uBlock Originでは性能の観点からサブツリー内の、つまり子要素の変更(追加、削除)があった時のみ整形ルールの再評価を行い、属性の変更を監視しません。

  • ameshkov.github.io###testdiv:watch-attr(id):has(p)
    ameshkov.github.ioでidがtestdivで<p>要素を持つ要素を非表示にし、この要素のidが変更された時に再評価を行う

:matches-attr()

uBlock OriginAdGuard

引数に基づいた属性を持つ要素を探します。これは特に属性がランダムに生成される場合に使用できます。
引数は「"属性名"="値"」の形で渡す必要があり、属性名と値には文字列の他に / で囲って正規表現が使用できます。値は省略可能で「"属性名"」だけの形でも可です。正規表現では " と \ を \ でエスケープする必要があります。

  • 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 OriginAdGuard×

引数として渡された自然数N個以上の文字数のあるテキストを持つ要素を探します。

  • example.com##span:min-text-length(35000))
    example.comとそのサブドメインで文字数35000個以上のテキストを持つ<span>要素を非表示にする
    正規表現のexample.com##span:has-text(/[\w\W]{35000}/)に相当

:others()

uBlock OriginAdGuard×

対象の要素を除く、全ての要素を対象にします。

  • example.com##p[id=foo]:others()
    example.comとそのサブドメインでidがfooの<p>要素を除く全ての要素を非表示にする

:upward()

uBlock OriginAdGuard

引数に沿ったセレクターの先祖要素を探します。引数は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*7AdGuard

:upward()とほとんど同じ動作ですが、AdGuardの場合は数値しか取れません。

:xpath()

uBlock OriginAdGuard

引数として渡された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 OriginAdGuard×

引数として渡された文字列リテラルに含まれるもしくは正規表現にマッチする属性を対象の要素から削除します。

  • example.com##button[onclick]:remove-attr(onclick)
    onclick属性をもつ<button>要素からonclick属性を削除する

:remove-class()

uBlock OriginAdGuard×

引数として渡された文字列リテラルに含まれるもしくは正規表現にマッチするクラスを対象の要素から削除します。

  • example.com###foo:remove-class(bar)
    idがfoo要素からclassのbarを削除する

:style()

uBlock OriginAdGuard

引数として渡された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 OriginAdGuard

対象の要素を隠す代わりに削除します。これはセレクターの末尾に置かなれけばなりません。
また擬似クラスではなく疑似プロパティ { 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 OriginAdGuard説明
acs / abort-current-script / acis / abort-current-inline-scriptabort-current-inline-script引数にそってインラインスクリプトの実行を中断する
aopr / abort-on-property-readabort-on-property-read引数で指定されたプロパティを読み込もうとした時スクリプトの実行を中断する
aopw / abort-on-property-writeabort-on-property-write引数で指定されたプロパティに書き込もうとした時スクリプトの実行を中断する
nano-sib / nano-setInterval-boosteradjust-setIntervalsetInterval()の遅延を調整する
nano-stb / nano-setTimeout-boosteradjust-setTimeoutsetTimeout()の遅延を調整する
nowebrtcRTCPeerConnectionを上書きしてWebRTCを無効にする
nosiif / no-setIntervalprevent-setInterval引数にそってsetInterval()を中断する
nostif / no-setTimeout-if / setTimeout-defuserprevent-setTimeout引数にそってsetTimeout()を中断する
ra / remove-attr(非推奨remove-attr引数に沿ってDOMの属性を削除する
rc / remove-class(非推奨remove-class引数に沿ってDOMのクラスを削除する
set / set-constantset-constant引数にそってプロパティを作成し、値を振り当てる

uBlock Origin

ルール = [ドメイン群] "##+js(" スクリプトレット名, 引数 ")"

例外
##+jsを#@#+jsに変更する
ドメイン群
ルールを適用するドメイン
使える機能は要素非表示ルールと同じ
スクリプトレット
使用するスクリプトレットの名前
引数
使用するスクリプトレットに対応する引数(ない場合もある)

AdGuard

ルール = [ドメイン群] "#%#//scriptlet(" スクリプトレット名, 引数 ")"

ドメイン群
ルールを適用するドメイン
使える機能は要素非表示ルールと同じ
スクリプトレット名
使用するスクリプトレットの名前
引数
使用するスクリプトレットに対応する引数(ない場合もある)
String以外の引数は渡せない

不具合等発生時には、「コメント欄」ではなく「不具合・広告相談所」に書き込んでください。
また、消えない広告については消えない広告の報告ご参照ください。

  • ここに報告でいいのかな?
    :style()の説明文がおかしいので前後の:remove-class() :style() :remove() / removeも含めて確認お願いいたします -- 2024-02-22 (木) 04:16:42

*1 $domainがないか「~」のみが指定されている
*2 <a href="https://example.net" target="_blank"> や window.open('https://www.example.net/') などで
*3 設定しなかった場合の暗黙の値は0
*4 この引数が存在しないAdGuardで$redirectルールを無効にするには$badfilterを使用
*5 上の構文ではクエリ文字列の値は関係しない
*6 Chromium 66+ / Firefox
*7 :upward()のエイリアスとして定義されている