Jak vytvářet vlastní filtry reklam
V tomto článku vysvětlíme, jak napsat vlastní pravidla filtrování pro použití v produktech AdGuardu. Chcete-li otestovat svá pravidla, stáhněte si aplikaci AdGuard
Filtr je sada pravidel filtrování aplikovaných na konkrétní obsah, například bannery nebo vyskakovací okna. AdGuard má seznam standardních filtrů vytvořených naším týmem. Neustále je vylepšujeme, aktualizujeme a snažíme se vyhovět potřebám většiny našich uživatelů.
AdGuard zároveň umožňuje vytvářet vlastní filtry pomocí stejných typů pravidel, které máme v našich filtrech.
K popisu syntaxe našich pravidel filtrování používáme Augmented BNF for Syntax Specifications, ale ne vždy se touto specifikací striktně řídíme.
Původně byla syntaxe AdGuardu založena na syntaxi pravidel Adblock Plus. Později jsme ji rozšířili o nové typy pravidel pro lepší filtrování reklam. Některé části tohoto článku o pravidlech společných pro AdGuard i ABP byly převzaty z příručka Adblock Plus o tom, jak psát filtry.
Komentáře
Každý řádek začínající vykřičníkem je komentář. V seznamu pravidel je zobrazen šedou barvou. AdGuard bude tento řádek ignorovat, takže můžete napsat cokoli chcete. Komentáře se obvykle umísťují nad pravidla a slouží k popisu toho, co pravidlo dělá.
Např:
! Toto je komentář. Pod tímto řádkem se nachází skutečné pravidlo filtrování.
||example.org^
Příklady
Blokování podle názvu domény
Toto pravidlo blokuje:
https://example.org/ad1.gifhttps://subdomain.example.org/ad1.gifhttps://ads.example.org:8000/
Toto pravidlo neblokuje:
https://ads.example.org.us/ad1.gifhttps://example.com/redirect/https://ads.example.org/
Ve výchozím nastavení tato pravidla pro žádosti o dokumenty nefungují. To znamená, že pravidlo ||example.org^ zablokuje požadavek na example.org při pokusu o přechod na tuto doménu z jiné webové stránky, ale pokud do adresního řádku zadáte example.org a pokusíte se na doménu přejít, webová stránka se otevře. Chcete-li zablokovat žádost o dokument, budete muset použít pravidlo s modifikátorem $document: ||example.org^$document.
Blokování přesné adresy
Toto pravidlo blokuje:
https://example.org/
Toto pravidlo neblokuje:
https://example.org/banner/img
Modifikátory základních pravidel
Pravidla filtrování podporují řadu modifikátorů, které umožňují doladit chování pravidla. Zde je příklad pravidla s několika jednoduchými modifikátory.
Toto pravidlo blokuje:
https://example.org/script.js, pokud je tento skript načten zexample.com.
Toto pravidlo neblokuje:
https://example.org/script.js, pokud je tento skript načten zexample.org.https://example.org/banner.png, protože se nejedná o skript.
Odblokování adresy
Toto pravidlo odblokuje:
https://example.org/banner.png, i když pro tuto adresu existuje pravidlo blokování.
Pravidla blokování s modifikátorem $important mohou přepsat výjimky.
Odblokování celé webové stránky
Toto pravidlo odblokuje
- Zakáže všechna kosmetická pravidla na
example.com. - Odblokuje všechny požadavky odeslané z této webové stránky, i když existují pravidla blokování odpovídající těmto požadavkům.
Kosmetické pravidlo
Kosmetická pravidla jsou založena na použití speciálního jazyka CSS, kterému rozumí každý prohlížeč. V podstatě přidává na webové stránky nový styl CSS, jehož účelem je skrýt určité prvky. Více o CSS obecně se můžete dozvědět zde.
AdGuard rozšiřuje CSS a umožňuje tak vývojářům filtrů řešit mnohem složitější případy. Abyste však mohli tato rozšířená pravidla používat, musíte ovládat běžný jazyk CSS.
Oblíbené selektory CSS
| Název | Selektor CSS | Popis |
|---|---|---|
| ID selector | #banners | Shoduje se se všemi prvky s atributem id rovným banners.![]() |
| Class selector | .banners | Shoduje se se všemi prvky s atributem class obsahujícím banners.![]() |
| Attribute selector | div[class="banners"] | Shoduje se se všemi prvky div s atributem class přesně rovným k banners.![]() |
| Attribute substring selector | div[class^="advert1"] | Shoduje se se všemi prvky div s atributem class začínajícím na řetězec advert1.![]() |
| Attribute substring selector | div[class$="banners_ads"] | Shoduje se se všemi prvky div s atributem class končícím na řetězec banners_ads.![]() |
| Attribute substring selector | a[href^="https://example.com/"] | Shoduje se se všemi odkazy načtenými z domény https://example.com/.![]() |
| Attribute selector | a[href="https://example.com/"] | Shoduje se se všemi odkazy exactly adresy https://example.com/.![]() |
Omezení a restrikce
Důvěryhodné filtry
Některá pravidla lze použít pouze v důvěryhodných filtrech. Tato kategorie zahrnuje:
- seznamy filtrů vytvořené týmem AdGuard,
- seznamy vlastních filtrů nainstalované jako
trusted, - uživatelská pravidla.
Blokátor obsahu AdGuard
Blokátor obsahu AdGuard je rozšíření pro prohlížeče Samsung a Yandex, které lze nainstalovat z Google Play. Nesmí se zaměňovat s plně funkčním nástrojem AdGuard pro Android, který lze stáhnout pouze z našich stránek. Bohužel, funkce Blokátoru obsahu AdGuard jsou omezeny tím, co prohlížeče umožňují a podporují pouze starou syntaxi filtrů Adblock Plus:
- Základní pravidla blokování s následujícími modifikátory:
$domain,$third-party, modifikátory typu obsahu. - Základní pravidla výjimek s následujícími modifikátory:
$document,$elemhide. - Základní pravidla pro skrývání prvků bez rozšířené podpory CSS.
Vzhledem k výše uvedeným omezením nebude Blokátor obsahu AdGuard uveden v poznámkách ke kompatibilitě.
SafariConverterLib
Safari Converter se snaží co nejvíce podporovat syntaxi pravidel filtrování AdGuard, ale stále existují omezení a nedostatky, které je těžké překonat.
Základní (síťová) pravidla
Safari Converter podporuje podstatnou podmnožinu základních pravidel a určitě podporuje nejdůležitější typy těchto pravidel.
Podporováno s omezeními
-
Pravidla regulárních výrazů jsou omezena na podmnožinu regex podporovanou prohlížečem Safari.
-
$domain- modifikátor domén je podporován s několika omezeními:- Není možné míchat povolené a zakázané domény (například
$domain=example.org|~sub.example.org). Dejte prosím pozitivní hodnocení žádosti o funkci pro WebKit, aby toto omezení zrušil. - "Libovolná TLD" (tj.
domain.*) není plně podporována. V současné implementaci konvertor pouze nahrazuje.*100 nejoblíbenějšími TLD. Tato implementace bude v budoucnu vylepšena. - Použití regulárních výrazů v
$domainnení podporováno, ale i to bude v budoucnu vylepšeno.
- Není možné míchat povolené a zakázané domény (například
-
$denyallow- tento modifikátor je podporován převodem pravidla$denyallowna sadu pravidel (jedno pravidlo blokování + několik pravidel pro odblokování).Vzhledem k tomuto omezení
$denyallowje povoleno pouze v případě, že pravidlo má také modifikátor$domain.- Generické pravidlo
*$denyallow=x.com,image,domain=a.combude převedeno na:
*$image,domain=a.com@@||x.com$image,domain=a.com- Pravidlo
/banner.png$image,denyallow=test1.com|test2.com,domain=example.orgbude převedeno na:
/banner.png$image,domain=example.org@@||test1.com/banner.png$image,domain=example.org@@||test1.com/*/banner.png$image,domain=example.org@@||test2.com/banner.png$image,domain=example.org@@||test2.com/*/banner.png$image,domain=example.org- Pravidlo bez
$domainnení podporováno:$denyallow=a.com|b.com.
- Generické pravidlo
-
$popup- jsou podporována pravidla vyskakovacích oken, ale jsou v podstatě stejná jako pravidla pro$document-pravidla blokování a nepokusí se kartu zavřít. -
Pravidla výjimek
(@@) zakazují kosmetické filtrování odpovídajících domén.Pravidla výjimek v Safari se spoléhají na typ pravidla
ignore-previous-rules, takže aby to fungovalo, musíme pravidla seřadit v určitém pořadí. Pravidla výjimek bez modifikátorů jsou umístěna na konci seznamu a proto znemožňují nejen blokování URL, ale i kosmetická pravidla.Toto omezení může být zrušeno, pokud bude implementována položka #70.
-
$urlblock,$genericblockje v podstatě stejné jako$document, tj. zakáže všechny druhy filtrování webových stránek.Tato omezení mohou být zrušena, až budou zavedeny položky #69 a #71.
-
$contentnemá v případě Safari smysl, protože pravidla filtrování HTML nejsou podporována, takže je zde pouze pro účely kompatibility. Pravidla s$contentjsou omezena na typ zdrojedocument. -
$specifichideje implementováno prohledáním existujících pravidel pro skrývání prvků a odstraněním cílové domény z jejich řadyif-domain.$specifichidepravidlo MUSÍ být zaměřeno na doménu, tj. musí vypadat takto:||example.org^$specifichide. Pravidla s konkrétnějšími vzory budou vyřazena, tj.||example.org/path$specifichidenebude podporováno.$specifichidese vztahuje pouze na pravidla, která jsou zaměřena na stejnou doménu jako samotné pravidlo, subdomény jsou ignorovány. Tj. pravidlo@@||example.org^$specifichidezakážeexample.org##.banner, ale bude ignorovatsub.example.org##.banner. Toto omezení může být zrušeno, pokud bude implementována položka #72.
-
Modifikátory
urlblock,genericblock,generichide,elemhide,specifichideajsinjectlze v pravidle použít pouze jako jeden modifikátor. Toto omezení může být v budoucnu zrušeno: #73. -
$websocket(plně podporováno od Safari 15). -
$ping(plně podporováno od Safari 14).
Nepodporováno
$app$header$method$strict-first-party(bude podporováno v budoucnu: #64)$strict-third-party(bude podporováno v budoucnu: #65)$to(bude podporováno v budoucnu: #60)$extension$stealth$cookie(bude částečně podporováno v budoucnu: #54)$csp$hls$inline-script$inline-font$jsonprune$xmlprune$network$permissions$redirect$redirect-rule$referrerpolicy$removeheader$removeparam$replace$urltransform
Kosmetická pravidla
Safari Converter podporuje většinu kosmetických pravidel ačkoli jsou nativně podporována pouze pravidla skrývání prvků se základními selektory CSS prostřednictvím blokování obsahu v Safari, vše ostatní je třeba interpretovat dalším rozšířením.
Omezení kosmetických pravidel
-
Pro zadávání domén platí stejná omezení jako pro modifikátor základních pravidel
$domain. -
Modifikátory jiných než základních pravidel jsou podporovány s určitými omezeními:
$domain- stejná omezení jako všude jinde.$path- podporováno, ale pokud použijete regulární výrazy, budou omezeny na podmnožinu regex podporovanou prohlížečem Safari.$url- bude podporováno v budoucnu: #68
Pravidla script/scriptlet
Safari Converter plně podporuje pravidla script a pravidla scriplet. Tato pravidla však lze vykládat pouze pomocí samostatného rozšíření.
:::varování
Pro pravidla scriplet je velmi důležité spustit je co nejdříve po načtení stránky. Důvodem je to, že je důležité, aby se spustil dříve než skripty stránky. V prohlížeči Safari bohužel vždy dochází k mírnému zpoždění, které může snížit kvalitu blokování.
:::
HTML pravidla filtrování
Pravidla filtrování HTML nejsou, a v budoucnu nebudou podporována. Safari bohužel neposkytuje potřebné technické možnosti pro jejich implementaci.
Základní pravidla
Nejjednoduššími pravidly jsou tzv. základní pravidla. Slouží k blokování požadavků na konkrétní adresy URL. Nebo je odblokují, pokud je na začátku pravidla speciální znak "@@". Základní princip tohoto typu pravidel je poměrně jednoduchý: je třeba zadat adresu a další parametry, které omezují nebo rozšiřují rozsah pravidla.
Základní pravidla pro blokování požadavků se vztahují pouze na dílčí požadavky. To znamená, že nebudou blokovat načítání stránky, pokud není výslovně zadána pomocí modifikátoru $document.
Prohlížeč rozpozná zablokovaný požadavek jako dokončený s chybou.
Pravidla kratší než 4 znaky jsou považována za nesprávná a budou ignorována.
Syntaxe základních pravidel
rule = ["@@"] pattern [ "$" modifiers ]
modifiers = [modifier0, modifier1[, ...[, modifierN]]]
pattern— maska adresy. Každá adresa URL požadavku je přiřazena k této masce. V šabloně můžete také použít speciální znaky popsané níže. Vezměte na vědomí, že AdGuard zkracuje adresy URL na délku 4096 znaků, aby urychlil porovnávání a předešel problémům s nesmyslně dlouhými adresami URL.@@— znak, který se používá v pravidlech výjimek. Chcete-li filtrování požadavku vypnout, začněte pravidlo touto značkou.modifiers— parametry, které "objasňují" základní pravidlo. Některé z nich omezují rozsah pravidel a některé mohou zcela změnit jejich fungování.
Speciální znaky
*— zástupný znak. Používá se k reprezentaci libovolné sady znaků. Může to být také prázdný řetězec nebo řetězec libovolné délky.||— indikace o použití pravidla na zadanou doménu a její subdomény. S tímto znakem nemusíte v masce adresy zadávat konkrétní protokol a subdoménu. Tj., že||znamenáhttps://*.,https://*.,ws://*.,wss://*.najednou.^— oddělovací znak. Oddělovací znak je libovolný znak, mimo písmeno, číslice nebo jeden z následujících znaků:_-.%. V tomto příkladu jsou oddělovací znaky zobrazeny tučně:http://example.com/?t=1&t2=t3. Konec adresy je také akceptován jako oddělovací znak.|— ukazatel na začátku nebo konci adresy. Hodnota závisí na umístění znaku v masce. Např. pravidloswf|odpovídáhttps://example.com/annoyingflash.swf, ale neodpovídáhttps://example.com/swf/index.html.|https://example.orgodpovídáhttps://example.org, ale nehttps://domain.com?url=https://example.org.
|, ||, ^ lze použít pouze u pravidel se vzorem URL. Např. ||example.com##.advert je nesprávný a bude blokátorem ignorován.
Doporučujeme také seznámit se s přehledem filtrů Adblock Plus, abyste lépe pochopili, jak taková pravidla vytvářet.
Podpora regulárních výrazů
Pokud chcete ještě větší flexibilitu při vytváření pravidel, můžete použít regulární výrazy namísto výchozí zjednodušené masky se speciálními znaky.
Pravidla s regulárními výrazy pracují pomaleji, proto se jim doporučuje vyhnout nebo omezit jejich rozsah na určité domény.
Pokud chcete, aby blokátor určil regulární výraz, musí pattern vypadat takto:
pattern = "/" regexp "/"
Např. pravidlo /banner\d+/$third-party použije regulární výraz banner\d+ na všechny požadavky třetích stran. Pravidlo výjimky s regulárním výrazem vypadá takto: @@/banner\d+/.
AdGuard pro Safari a AdGuard pro iOS plně nepodporují regulární výrazy kvůli omezení API pro blokování obsahu (hledejte sekci "Formát regulárního výrazu").
Podpora zástupných znaků pro TLD (domény nejvyšší úrovně)
Zástupné znaky jsou podporovány pro TLD domén ve vzorech kosmetických, filtrování HTML a pravidel JavaScript.
V případě kosmetických pravidel, např. example.*##.banner, je díky znaku .*, tj. example.com, sub.example.net, example.co.uk, atd. přiřazeno více domén.
Pro základní pravidla platí popsaná logika pouze pro domény uvedené v $domain modifikátoru, např. ||*/banners/*$image,domain=example.*.
V AdGuardu pro Windows, Mac, Android a v pravidlech rozšíření prohlížeče AdGuard se zástupným znakem .*, odpovídá jakékoli veřejné příponě (nebo eTLD). Pro AdGuard pro Safari a iOS je však seznam podporovaných domén nejvyšší úrovně omezen kvůli omezením v Safari.
Pravidla se zástupným znakem pro TLD nejsou podporována Blokátorem obsahu AdGuard.
Příklady základních pravidel
-
||example.com/ads/*— jednoduché pravidlo, které odpovídá adresám typuhttps://example.com/ads/banner.jpga dokonce ihttps://subdomain.example.com/ads/otherbanner.jpg. -
||example.org^$third-party— toto pravidlo blokuje požadavky třetích stran naexample.orga jejím subdoménám. -
@@||example.com$document— obecné pravidlo výjimky. Zcela vypne filtrování proexample.coma všechny subdomény. V pravidlech pro výjimky lze použít řadu modifikátorů. Pro více podrobností klikněte na odkaz níže.
Modifikátory základních pravidel
Funkce popsané v této části jsou určeny pro zkušené uživatele. Rozšiřují možnosti "základních pravidel", ale abyste je mohli používat, musíte mít základní znalosti o fungování prohlížeče.
Chování "základního pravidla" můžete změnit pomocí dalších modifikátorů. Modifikátory by měly být umístěny na konci pravidla za znakem $ a odděleny čárkami.
Příklad:
||domain.com^$popup,third-party
Základní modifikátory
Následující modifikátory jsou nejjednodušší a nejčastěji používané. V podstatě jen omezují rozsah použití pravidel.
| Modifikátor \ Produkty | Aplikace CoreLibs | AdGuard pro Chromium | AdGuard pro Chrome MV3 | AdGuard pro Firefox | AdGuard pro iOS | AdGuard Mini pro Mac | Blokátor obsahu AdGuard |
|---|---|---|---|---|---|---|---|
| $app | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| $denyallow | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
| $domain | ✅ | ✅ | ✅ *[1] | ✅ | ✅ *[1] | ✅ *[1] | ✅ |
| $header | ✅ | ✅ *[2] | ✅ *[2] | ✅ *[2] | ❌ | ❌ | ❌ |
| $important | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| $match-case | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| $method | ✅ | ✅ | ✅ | ✅ | ✅ *[2] | ✅ *[2] | ❌ |
| $popup | ✅ *[3] | ✅ | ✅ *[3] | ✅ | ✅ *[3] | ✅ *[3] | ❌ |
| $strict-first-party | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| $strict-third-party | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| $third-party | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| $to | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
- ✅ — plně podporováno
- ✅ * — podporováno, ale spolehlivost se může lišit nebo se mohou vyskytnout omezení; více informací naleznete v popisu modifikátoru
- ❌ — nepodporováno
$app
Tento modifikátor umožňuje zúžit pokrytí pravidla na konkrétní aplikaci (nebo seznam aplikací). V systémech Windows a Mac to nemusí být příliš důležité, ale v mobilních zařízeních, kde některá pravidla filtrování musí být specifická pro konkrétní aplikaci, je to velmi důležité.
- Android — použijte název balíčku aplikace, např.
org.example.app. - Windows — použijte název procesu, např.
chrome.exe. - Mac — použijte ID svazku nebo název procesu, např.
com.google.Chrome.
V případě počítače Mac můžete ID svazku nebo název procesu aplikace zjistit zobrazením příslušných podrobností o požadavku v záznamu filtrování.
Syntaxe
Modifikátor je seznam jednoho nebo více výrazů, z nichž každý je porovnáván s aplikací určitým způsobem v závislosti na svém typu. Tyto výrazy jsou odděleny symbolem |.
applications = ["~"] entry_0 ["|" ["~"] entry_1 ["|" ["~"]entry_2 ["|" ... ["|" ["~"]entry_N]]]]
entry_i = ( regular_app / wildcard_app / regexp )
regular_app— regulární název aplikace (example.app). Odpovídá zadané aplikaci a je přiřazen lexikograficky.wildcard_app— název aplikace končící zástupným znakem*, např.org.example.*nebocom.ad*. Odpovídá všem aplikacím, jejichž názvy začínají zadanou předponou. Porovnání se provádí lexikograficky.regexp— regulární výraz, který začíná a končí znakem/. Funguje stejně jako v základních pravidlech URL, ale znaky/,$,,a|musí být uvozeny pomocí\.
Příklady
||baddomain.com^$app=org.example.app— pravidlo pro blokování požadavků, které odpovídají zadané masce a jsou odeslány z Android aplikaceorg.example.app.||baddomain.com^$app=org.example.app1|org.example.app2— stejné pravidlo, ale funguje jak proorg.example.app1, tak i proorg.example.app2.
Pokud chcete, aby se pravidlo nevztahovalo na určité aplikace, začněte název aplikace znakem ~.
||baddomain.com^$app=~org.example.app— pravidlo pro blokování požadavků, které odpovídají zadané masce a jsou odeslány z jakékoli aplikace kroměorg.example.app.||baddomain.com^$app=~org.example.app1|~org.example.app2— stejně jako výše, ale nyní jsou vyloučeny dvě aplikace:org.example.app1aorg.example.app2.
Zástupné znaky můžete použít v modifikátoru $app:
||baddomain.com^$app=org.example.*— použije se pro všechny aplikace, jejichž názvy balíčků začínají naorg.example.
V modifikátoru $app můžete použít regulární výrazy, které uzavřete do lomítek /.../. To umožňuje flexibilnější párování — například cílení na skupinu aplikací od stejného vydavatele nebo párování složitých vzorů.
||baddomain.com^$app=/org\.example\.[a-z0-9_]+/— platí pro všechny aplikace, jejichž název balíčku začínáorg.example(např.org.example.app1,org.example.utilityatd.).||baddomain.com^$app=/^org\.example\.app\$\|^org\.example\.[ab].*/— platí proorg.example.appa pro všechny aplikace, jejichž balíček začínáorg.example.aneboorg.example.b.
Modifikátor $app podporuje kombinování všech tří typů záznamů — prostých názvů, zástupných znaků a regulárních výrazů — v rámci stejného pravidla, ale neumožňuje kombinovat negované a nenegované výrazy dohromady.
||example.com^$app=org.example.app|org.example.*|/org\.example\.[a-z]+/— platí proorg.example.app, všechny odpovídající aplikaceorg.example.*aorg.example.[a-z]+.
- Aplikace v hodnotě modifikátoru nemohou obsahovat zástupný znak uvnitř řetězce, např.
$app=com.*.music. Použijte místo toho regulární výraz:$app=/com\..*\.music/. - Nelze kombinovat negované (
~) a nenegované výrazy ve stejném modifikátoru$app— bylo by to nejednoznačné.
- Pouze AdGuard pro Windows, Mac a Android jsou technicky schopné používat pravidla s modifikátorem
$app. - V systému Windows se v názvu procesu nerozlišují velká a malá písmena, počínaje AdGuard pro Windows s CoreLibs v1.12 nebo novější.
- Podpora regulárních výrazů a kombinování různých typů záznamů (prosté názvy, zástupné znaky a regulární výrazy) v modifikátoru
$appje k dispozici od verze CoreLibs v1.19 nebo novější.
$denyallow
Modifikátor $denyallow umožňuje vyhnout se vytváření dalších pravidel, pokud je potřeba zakázat určité pravidlo pro konkrétní domény. $denyallow odpovídá pouze cílovým doménám, nikoli doménám odkazujícím.
Přidání tohoto modifikátoru k pravidlu je ekvivalentní vyloučení domén podle shodného vzoru pravidla nebo přidání odpovídajících pravidel výjimek. Chcete-li do jednoho pravidla přidat více domén, použijte jako oddělovací znak |.
Příklady
Toto pravidlo:
*$script,domain=a.com|b.com,denyallow=x.com|y.com
odpovídá tomuto:
/^(?!.*(x.com|y.com)).*$/$script,domain=a.com|b.com
nebo kombinaci těchto tří:
*$script,domain=a.com|b.com
@@||x.com$script,domain=a.com|b.com
@@||y.com$script,domain=a.com|b.com
- Vzor shody pravidla se nemůže zaměřit na žádné konkrétní domény, např. nemůže začínat
||. - Domény v hodnotě modifikátoru nemohou být negovány, např.
$denyallow=~x.com, nebo mít zástupný znak TLD, např.$denyallow=x.*, nebo být regulárním výrazem, např.;$denyallow=/\.(com\|org)/. $denyallownelze použít společně s$to. Lze ji vyjádřit pomocí invertovaného$to:$denyallow=a.com|b.com, což je je ekvivalent k$to=~a.com|~b.com.
Pravidla, která tato omezení porušují, jsou považována za neplatná.
Pravidla s modifikátorem $denyallow nejsou AdGuardem pro iOS, Safari a Blokátorem obsahu AdGuard podporována.
$domain
$domain omezuje rozsah pravidla na požadavky ze zadaných domén a jejich subdomén (jak je uvedeno v záhlaví Referer HTTP).
Syntaxe
Modifikátor je seznam jednoho nebo více výrazů oddělených symbolem |, z nichž každý je porovnáván s doménou určitým způsobem v závislosti na svém typu (viz níže).
domains = ["~"] entry_0 ["|" ["~"] entry_1 ["|" ["~"]entry_2 ["|" ... ["|" ["~"]entry_N]]]]
entry_i = ( regular_domain / any_tld_domain / regexp )
regular_domain— běžný název domény (domain.com). Odpovídá zadané doméně a jejím subdoménám. Shoduje se lexikograficky.any_tld_domain— název domény zakončený zástupným znakem jako veřejná přípona, např. proexample.*je toco.ukvexample.co.uk. Odpovídá zadané doméně a jejím subdoménám s libovolnou veřejnou příponou. Shoduje se lexikograficky.regexp— regulární výraz, který začíná a končí znakem/. Vzor funguje stejně jako v základních pravidlech URL, ale znaky/,$,,a|musí být uvozeny pomocí\.
Pravidla s modifikátorem $domain jako regular_domain jsou podporována všemi AdGuard produkty.
Příklady
Jen $domain:
||baddomain.com^$domain=example.orgblokuje požadavky, které odpovídají zadané masce a jsou odeslány z doményexample.orgnebo jejích subdomén.||baddomain.com^$domain=example.org|example.com— stejné pravidlo, ale funguje jak proexample.org, tak i proexample.com.
Pokud chcete, aby se pravidlo nevztahovalo na určité domény, začněte název domény znakem ~.
$domain a negace ~:
||baddomain.com^$domain=example.orgblokuje požadavky, které odpovídají zadané masce a jsou odeslány z doményexample.orgnebo jejích subdomén.||baddomain.com^$domain=example.org|example.com— stejné pravidlo, ale funguje jak proexample.org, tak i proexample.com.||baddomain.com^$domain=~example.orgblokuje požadavky, které odpovídají vzoru a jsou odeslané z jakékoli domény kroměexample.orga jejích subdomén.||baddomain.com^$domain=example.org|~foo.example.orgblokuje požadavky odeslané zexample.orga jích subdomén, kromě subdoményfoo.example.org.||baddomain.com^$domain=/(^\|.+\.)example\.(com\|org)\$/blokuje požadavky odeslané zexample.orgaexample.coma všech jejích subdomén.||baddomain.com^$domain=~a.com|~b.*|~/(^\|.+\.)c\.(com\|org)\$/blokuje požadavky odeslané za.com,bs libovolnou veřejnou příponou (b.com,b.co.uk, etc.),c.com,c.org, a jejich subdomén.
$domain modifikátor odpovídající cílové doméně:
V některých případech může modifikátor $domain odpovídat nejen doméně odkazovače, ale také cílové doméně.
K tomu dochází, když pravidlo obsahuje jeden z následujících modifikátorů: $cookie, $csp, $permissions, $removeparam.
Tyto modifikátory nebudou použity, pokud odkazující doména odpovídá pravidlu s $domain, které výslovně vylučuje odkazující doménu, i když cílová doména také odpovídá pravidlu.
Příklady
*$cookie,domain=example.org|example.comzablokuje soubory cookie pro všechny požadavky do a z doményexample.orgaexample.com.*$document,domain=example.org|example.comzablokuje pouze požadavky zexample.orgaexample.com, ale ne požadavky směřující na tyto domény.
V následujících příkladech se předpokládá, že požadavky jsou odesílány z adresy https://example.org/page (odkazující adresa), cílová adresa URL je https://targetdomain.com/page.
page$domain=example.orgbude přiřazena, protože odpovídá doméně odkazu.page$domain=targetdomain.comnebude odpovídat, protože neodpovídá doméně odkazujícího webu.||*page$domain=targetdomain.com,cookiebude odpovídat, protože pravidlo obsahuje modifikátor$cookie, i když vzor||*pagemůže odpovídat konkrétním doménám.page$domain=targetdomain.com|~example.org,cookienebude přiřazena, protože doména odkazu je výslovně vyloučena.
omezení modifikátoru $domain
V AdGuardu pro Chrome MV3 nejsou podporovány domény s regexp a any_tld_domain a modifikátory $removeparam.
AdGuard pro iOS a AdGuard pro Safari podporují modifikátor $domain, ale má některá omezení. Pro více informací navštivte sekci SafariConverterLib.
Pravidla s modifikátorem regexp v $domain nejsou podporována AdGuardem pro iOS a Safari.
Pravidla s regulárními výrazy v modifikátoru $domain jsou podporována AdGuardem pro Windows, AdGuardem pro Mac, AdGuardem pro Android a AdGuardem pro Linux s CoreLibs v1.11 nebo novějším a rozšířením prohlížeče AdGuard s TSUrlFilter v3.0.0 nebo novějším.
V AdGuardu pro Windows, Mac a Android s CoreLibs v1.12 nebo novějším může být modifikátor $domain alternativně zapsán jako $from.
$header
Modifikátor $header umožňuje porovnat odpověď HTTP se specifickým záhlavím s (volitelně) specifickou hodnotou.
Syntaxe
$header "=" h_name [":" h_value]
h_value = string / regexp
kde:
h_name— povinný název záhlaví HTTP. Je přizpůsoben případ od případu.h_value— nepovinný výraz odpovídající hodnotě záhlaví HTTP, může to být jeden z následujících výrazů:string— posloupnost znaků. Porovnává se s hodnotou záhlaví lexikograficky;regexp— regulární výraz, který začíná a končí znakem/. Vzor funguje stejně jako v základních pravidlech pro URL adresy, ale znaky/,$a,musí být uvozeny pomocí\.
Část modifikátoru ":" h_value lze vynechat. V takovém případě modifikátor odpovídá pouze názvu záhlaví.
Příklady
||example.com^$header=set-cookie:fooblokuje požadavky, jejichž odpovědi mají hlavičkuSet-Cookies hodnotou odpovídajícífoo.||example.com^$header=set-cookieblokuje požadavky, jejichž odpovědi mají hlavičkuSet-Cookies libovolnou hodnotou.@@||example.com^$header=set-cookie:/foo\, bar\$/odblokuje požadavky, jejichž odpovědi mají hlavičkuSet-Cookies hodnotou odpovídající regulárnímu výrazufoo, bar$.@@||example.com^$header=set-cookieodblokuje požadavky, jejichž odpovědi mají hlavičkuSet-Cookies libovolnou hodnotou.
omezení modifikátoru $header
-
Modifikátor
$headerlze porovnat pouze v případě, že jsou přijata záhlaví. Pokud je tedy požadavek zablokován nebo přesměrován v dřívější fázi, nelze modifikátor použít. -
V Rozšíření prohlížeče AdGuard je modifikátor
$headerkompatibilní poze s$csp,$removeheader(pouze hlavičky odpovědí),$important,$badfilter,$domain,$third-party,$match-cases content-type modifiers jako$scripta$stylesheet. Pravidla s jinými modifikátory jsou považována za neplatná a budou vyřazena. -
V Rozšíření prohlížeče AdGuard MV3 nejsou podporovány regulární výrazy v hodnotách modifikátoru
$header.
Pravidla s modifikátorem $header jsou podporována AdGuardem pro Windows, AdGuardem pro Mac, AdGuardem pro Android a AdGuardem pro Linux s CoreLibs v1.11 nebo novějším a rozšířením prohlížeče AdGuard s TSUrlFilter v3.0.0 nebo novějším a rozšířením prohlížeče Adguard MV3 v5.3 a novějším.
$important
Modifikátor $important použitý na pravidlo zvyšuje jeho prioritu oproti pravidlům bez stejného modifikátoru. Dokonce i přes základní pravidla výjimek.
Další podrobnosti najdete v prioritách pravidel.
Příklady
! pravidlo blokování zablokuje všechny požadavky navzdory pravidlu výjimky
||example.org^$important
@@||example.org^
! pokud má pravidlo výjimky také modifikátor `$important`, bude mít přednost a žádné požadavky nebudou blokovány
||example.org^$important
@@||example.org^$important
$match-case
Tento modifikátor definuje pravidlo, které se vztahuje pouze na adresy odpovídající danému případu. Výchozí pravidla nerozlišují velká a malá písmena.
Příklady
*/BannerAd.gif$match-case— toto pravidlo zablokujehttps://example.com/BannerAd.gif, ale nehttps://example.com/bannerad.gif.
Pravidla s $match-case jsou podporována aplikací AdGuard pro iOS a AdGuard pro Safari s SafariConverterLib v2.0.43 nebo novějším.
Všechny ostatní produkty již tento modifikátor podporují.
$method
Tento modifikátor omezuje rozsah pravidla na požadavky, které používají zadanou sadu metod HTTP. Negované metody jsou povoleny. Metody musí být zadány malými písmeny, ale při porovnávání se nerozlišují velká a malá písmena. Chcete-li do jednoho pravidla přidat více metod, použijte jako oddělovací znak svislou čáru |.
Příklady
||evil.com^$method=get|headblokuje pouze požadavky GET a HEAD na doméněevil.com.||evil.com^$method=~post|~putblokuje všechny požadavky na doméněevil.comkromě POST nebo PUT.@@||evil.com$method=getodblokuje pouze požadavky GET na doméněevil.com.@@||evil.com$method=~postodblokuje jakékoliv požadavky na doméněevil.comkromě POST.
-
V aplikacích AdGuard pro iOS a AdGuard Mini pro Mac modifikátor
$methodnepodporuje negaci. Proto nejsou podporována pravidla jako$method=~get. -
Pravidla s kombinací negovaných a nenegovaných hodnot jsou považována za neplatná. Takže např. pravidlo
||evil.com^$method=get|~headbude ignorováno.
Pravidla s modifikátorem $method jsou podporována AdGuardem pro Windows, Mac, Android a Linux s CoreLibs v1.12 nebo novější a Rozšířením prohlížeče AdGuard pro Chrome, Firefox a Edge s filtrem TSUrlFilter v2.1.1 nebo novějším.
V aplikacích AdGuard pro iOS (verze 4.5.15 nebo novější) a AdGuard Mini pro Mac (verze 2.1 nebo novější) je modifikátor $method podporován s omezeními.
$popup
AdGuard se pokusí zavřít kartu prohlížeče s jakoukoli adresou, která odpovídá pravidlu blokování s tímto modifikátorem. Upozorňujeme, že ne všechny karty lze zavřít.
Příklady
||domain.com^$popup— pokud se pokusíte přejít nahttps://domain.com/z libovolné stránky v prohlížeči, nová karta, ve které má být zadaný web otevřen, bude tímto pravidlem zavřena.
omezení modifikátoru $popup
- Modifikátor
$popupfunguje nejlépe v rozšíření prohlížeče AdGuard pro prohlížeče založené na Chromiu a Firefox. - In AdGuard for Chrome MV3 rules with the
$popupmodifier would not work, so we disable converting them to declarative rules. Pokusíme se je použít pouze v našem enginu TSUrlFilter a zavírat nové karty programově. - V AdGuardu pro Safari a AdGuardu pro iOS, pravidla
$popupstránku jednoduše a okamžitě zablokují. - V AdGuardu pro Windows, Mac, Android a Linux nemusí modifikátor
$popupv některých případech detekovat vyskakovací okno a nebude zablokováno. Modifikátor$popuppoužije typ obsahudocumentse speciálním příznakem, který je předán blokovací stránce. Samotná blokovací stránka může provést některé kontroly a zavřít okno, pokud se skutečně jedná o vyskakovací okno. V opačném případě by se stránka měla načíst. Lze jej kombinovat s dalšími modifikátory typu požadavku, například$third-party,$strict-third-party,$strict-first-partya$important.
Pravidla s modifikátorem $popup nejsou Blokátorem obsahu AdGuard podporována.
$strict-first-party
Funguje stejně jako modifikátor $~third-party, ale zachází s požadavkem jako s vlastním, pokud má odkazovač a původ naprosto stejný název hostitele.
Požadavky bez odkazovače jsou také považovány za vlastní požadavky a na tyto požadavky se vztahují pravidla s modifikátorem $strict-first-party.
Příklady
- domain.com$strict-first-party' – toto pravidlo platí pouze pro
domena.com. Např. požadavek zdomain.comnahttps://domain.com/icon.icoje požadavek vlastní. Požadavek zsub.domain.comnahttps://domain.com/icon.icoje považován za požadavek třetí strany (na rozdíl od modifikátoru$~third-party).
Místo plného názvu modifikátoru můžete použít kratší název (alias): $strict1p.
Pravidla s modifikátorem $strict-first-party jsou podporována AdGuardem pro Windows, Mac, Android a Linux s CoreLibs v1.16 nebo novější.
Požadavky bez odkazovače jsou porovnávány podle pravidel s $strict-first-party v AdGuardu pro Windows, AdGuardu pro Mac a AdGuardu pro Android s CoreLibs v1.18 nebo novější.
$strict-third-party
Funguje stejně jako modifikátor $third-party, ale zpracovává požadavky z domény na její subdomény a naopak jako žádosti třetí strany.
Příklady
||domain.com^$strict-thirdparty— toto pravidlo bude použito na všechny domény, kromědomain.com. Příklad požadavku třetí strany:https://sub.domain.com/banner.jpg(na rozdíl od modifikátoru$third-party).
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
Místo plného názvu modifikátoru můžete použít kratší název (alias): $strict3p.
:::
Pravidla s modifikátorem $strict-third-party jsou podporována AdGuardem pro Windows, Mac a Android s CoreLibs v1.16 nebo novější.
$third-party
Omezení požadavků třetích stran a vlastních požadavků. Požadavek třetí strany je požadavek z externí domény. Např. požadavek na example.org z domain.com je požadavek třetí strany.
Aby mohla být žádost třetí strany považována za takovou, měla by splňovat jednu z následujících podmínek:
- Její odkazující doména není subdoménou cílové domény nebo naopak. Např. požadavek na
subdomain.example.orgzexample.orgnení požadavek třetí strany - Její záhlaví
Sec-Fetch-Siteje nastaveno nacross-site
Příklady
$third-party:
||domain.com^$third-party— toto pravidlo bude použito na všechny domény, kromědomain.coma její subdomény. Pravidlo se nikdy neuplatní, pokud neexistuje žádný odkazovač. Příklad požadavku třetí strany:https://example.org/banner.jpg.
Pokud existuje modifikátor $third-party, pravidlo se použije pouze na požadavky, které nejsou od třetích stran. To znamená, že musí být odeslány ze stejné domény nebo by neměly mít vůbec žádný odkazovač.
$~third-party:
||domain.com$~third-party— toto pravidlo se vztahuje výhradně nadomain.com. Příklad požadavku která není podán třetí stranou:https://sub.domain.com/icon.ico.
Požadavky bez odkazovače jsou rovněž považovány za požadavky, které nejsou požadavky třetích stran, a jsou na ně aplikována pravidla s modifikátorem $~third-party.
Místo plného názvu modifikátoru můžete použít kratší název (alias): $3p.
Požadavky bez odkazovače jsou porovnávány podle pravidel s $~third-party v AdGuardu pro Windows, AdGuardu pro Mac a AdGuardu pro Android s CoreLibs v1.18 nebo novější.
$to
$to omezuje rozsah pravidla na požadavky na zadané domény a jejich subdomény. Chcete-li do jednoho pravidla přidat více domén, použijte jako oddělovací znak |.
Příklady
/ads$to=evil.com|evil.orgzablokuje jakýkoliv požadavek naevil.comneboevil.orga jejich subdomény s cestou, která odpovídá/ads./ads$to=~not.evil.com|evil.comzablokuje jakýkoliv požadavek naevil.coma její subdomény s cestou, která odpovídá/ads, kromě požadavků nanot.evil.coma její subdomény./ads$to=~good.com|~good.orgzablokuje všechny požadavky s cestou, která odpovídá/ads, kromě požadavků nagood.comnebogood.orga jejich subdomény.
$denyallow nelze použít společně s $to. Lze ji vyjádřit pomocí invertovaného $to: $denyallow=a.com|b.com, což je je ekvivalent k $to=~a.com|~b.com.
Pravidla s modifikátorem $to jsou podporována AdGuardem pro Windows, AdGuardem pro Mac, AdGuardem pro Android a AdGuardem pro Linux s CoreLibs v1.12 nebo novějším a rozšířením prohlížeče AdGuard s TSUrlFilter v2.1.3 nebo novějším.
Modifikátory typu obsahu
Existuje sada modifikátorů, které lze použít k omezení oblasti použití pravidla na určitý typ obsahu. Tyto modifikátory lze také kombinovat, aby zahrnovaly například obrázky i skripty.
V tom, jak AdGuard určuje typ obsahu na různých platformách, existuje velký rozdíl. U Rozšíření prohlížeče AdGuard je typ obsahu pro každý požadavek poskytován prohlížečem. AdGuard pro Windows, Mac a Android používají následující metodu: nejprve se aplikace pokusí určit typ požadavku podle záhlaví požadavku Sec-Fetch-Dest nebo podle přípony názvu souboru. Pokud není požadavek v této fázi zablokován, určí se typ pomocí záhlaví Content-Type na začátku odpovědi serveru.
Příklady modifikátorů typu obsahu
||example.org^$image— odpovídá všem obrázkům zexample.org.||example.org^$script,stylesheet— odpovídá všem skriptům a stylům zexample.org.||example.org^$~image,~script,~stylesheet— odpovídá všem požadavkům naexample.orgkromě obrázků, skriptů a stylů.
| Modifikátor \ Produkty | Aplikace CoreLibs | AdGuard pro Chromium | AdGuard pro Chrome MV3 | AdGuard pro Firefox | AdGuard pro iOS | AdGuard pro Safari | Blokátor obsahu AdGuard |
|---|---|---|---|---|---|---|---|
| $document | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| $font | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| $image | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| $media | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| $object | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
| $other | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| $ping | ✅ *[1] | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
| $script | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| $stylesheet | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| $subdocument | ✅ *[2] | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| $websocket | ✅ | ✅ | ✅ | ✅ | ✅ *[3] | ✅ *[3] | ❌ |
| $xmlhttprequest | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| $webrtc 🚫 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| $object-subrequest 🚫 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
- ✅ — plně podporováno
- ✅ * — podporováno, ale spolehlivost se může lišit nebo se mohou vyskytnout omezení; více informací naleznete v popisu modifikátoru
- ❌ — nepodporováno
- 🚫 — odstraněno a již nepodporováno
$document
Pravidlo odpovídá požadavkům na dokument hlavního rámce, tj. dokumenty HTML načtené na kartě prohlížeče. Neodpovídá hodnotám iframe, pro ten existuje modifikátor $subdocument.
Ve výchozím nastavení AdGuard neblokuje požadavky, které se načítají na kartě prohlížeče (např. "obcházení hlavního rámce"). Cílem není zabránit načtení stránek, protože uživatel jasně uvedl, že chce, aby se tato stránka načetla. Pokud je však modifikátor $document zadán explicitně, AdGuard tuto logiku nepoužije a zabrání načtení stránky. Místo toho se zobrazí "blokační stránka".
Pokud je tento modifikátor použit s pravidlem výjimky (@@), zcela zakáže blokování na příslušných stránkách. Je to ekvivalentní použití modifikátorů $elemhide, $content, $urlblock, $jsinject, $extension současně.
Příklady
-
@@||example.com^$documentzcela zakáže filtrování všech stránek naexample.coma všech subdoménách. -
||example.com^$documentzablokuje požadavek na dokument HTML naexample.compomocí blokační stránky. -
||example.com^$document,redirect=noopframepřesměruje požadavek na HTML dokument naexample.comna prázdný HTML dokument. -
||example.com^$document,removeparam=testodebere parametr dotazutestz požadavku dokumentu HTML naexample.com. -
||example.com^$document,replace=/test1/test2/nahradítest1zatest2v požadavku na dokument HTML naexample.com.
Místo plného názvu modifikátoru můžete použít kratší název (alias): $doc.
$font
Pravidlo odpovídá požadavkům na písma, např. s příponou .woff.
$image
Pravidlo odpovídá požadavkům na obrázky.
$media
Pravidlo odpovídá požadavkům na mediální soubory — hudbu a video, např. soubory .mp4.
$object
Pravidlo odpovídá prostředkům pluginů prohlížeče, např. Java nebo Flash.
Pravidla s modifikátorem $object nejsou podporována AdGuardem pro iOS a Safari.
$other
Pravidlo se vztahuje na požadavky, jejichž typ nebyl určen nebo neodpovídá výše uvedeným typům.
$ping
Pravidlo odpovídá požadavkům vyvolaným buď navigator.sendBeacon(), nebo atributem ping v odkazech.
omezení modifikátoru $ping
AdGuard pro Windows, Mac a Android často nedokáží přesně detekovat navigator.sendBeacon(). V seznamech filtrů, které mají používat AdGuard produkty založené na knihovně CoreLibs, se nedoporučuje používat $ping.
Pravidla s modifikátorem $ping nejsou podporována AdGuardem pro iOS a Safari.
$script
Pravidlo odpovídá požadavkům na skripty, např. JavaScript, VBScript.
$stylesheet
Pravidlo odpovídá požadavkům na soubory CSS.
Místo plného názvu modifikátoru můžete použít kratší název (alias): $css.
$subdocument
Pravidlo odpovídá požadavkům na vestavěné stránky — značky HTML frame a iframe.
Příklady
||example.com^$subdocumentblokuje integrované požadavky (frameaiframe) naexample.coma všechny její subdomény kdekoli.||example.com^$subdocument,domain=domain.comblokuje integrované požadavky (frameиiframe) naexample.com(a její subdomény) zdomain.coma všech jejích subdomén.
Místo plného názvu modifikátoru můžete použít kratší název (alias): $frame.
omezení modifikátoru $subdocument
V AdGuardu pro Windows, Mac a Android jsou subdokumenty detekovány záhlavím Sec-Fetch-Dest, pokud je přítomno. V opačném případě mohou být některé hlavní stránky považovány za dílčí dokumenty.
Pravidla s modifikátorem $subdocument nejsou Blokátorem obsahu AdGuard podporována.
$websocket
Pravidlo se vztahuje pouze na připojení WebSocket.
omezení modifikátoru $websocket
AdGuard pro Safari a AdGuard pro iOS je podporován na zařízeních se systémem macOS Monterey (verze 12), respektive iOS 16 a vyšší.
Modifikátor $websocket je podporován ve všech produktech AdGuardu kromě Blokátoru obsahu AdGuard.
$xmlhttprequest
Pravidlo se vztahuje pouze na požadavky ajax (požadavky odeslané prostřednictvím objektu JavaScript XMLHttpRequest).
Místo plného názvu modifikátoru můžete použít kratší název (alias): $xhr.
AdGuard pro Windows, Mac a Android při filtrování starších prohlížečů nedokáže přesně detekovat tento typ a někdy jej detekuje jako $other nebo $script. Tento typ obsahu mohou spolehlivě detekovat pouze při filtrování moderních prohlížečů, které podporují Záhlaví požadavku na načtení metadat.
$object-subrequest (odstraněno)
Modifikátor $object-subrequest je odstraněn a již není podporován. Pravidla s tímto modifikátorem jsou považována za neplatná. Pravidlo odpovídá požadavkům pluginů prohlížeče (obvykle se jedná o Flash).
$webrtc (odstraněno)
Tento modifikátor je odstraněn a již není podporován. Pravidla s tímto modifikátorem jsou považována za neplatná. Pokud potřebujete potlačit WebRTC, zvažte použít nowebrtc scriptlet.
Pravidlo se vztahuje pouze na připojení WebRTC.
Příklady
||example.com^$webrtc,domain=example.orgblokuje připojení webRTC naexample.comzexample.org.@@*$webrtc,domain=example.orgzakáže RTC wrapper proexample.org.
Modifikátory pravidel pro výjimky
Pravidla výjimek deaktivují ostatní základní pravidla pro adresy, kterým odpovídají. Začínají značkou @@. Lze na ně aplikovat všechny výše uvedené základní modifikátory a mají také několik speciálních modifikátorů.
Doporučujeme také seznámit se s přehledem filtrů Adblock Plus, abyste lépe pochopili, jak pravidla výjimek vytvářet.
| Modifikátor \ Produkty | Aplikace CoreLibs | AdGuard pro Chromium | AdGuard pro Chrome MV3 | AdGuard pro Firefox | AdGuard pro iOS | AdGuard pro Safari | Blokátor obsahu AdGuard |
|---|---|---|---|---|---|---|---|
| $content | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
| $elemhide | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| $extension | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| $jsinject | ✅ | ✅ | ✅ *[1] | ✅ | ✅ | ✅ | ❌ |
| $stealth | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| $urlblock | ✅ | ✅ | ❌ | ✅ | ✅ *[2] | ✅ *[2] | ❌ |
| $genericblock | ✅ | ✅ | ✅ | ✅ | ✅ *[3] | ✅ *[3] | ❌ |
| $generichide | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| $specifichide | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
- ✅ — plně podporováno
- ✅ * — podporováno, ale spolehlivost se může lišit nebo se mohou vyskytnout omezení; více informací naleznete v popisu modifikátoru
- ❌ — nepodporováno
:::
Ve výchozím nastavení, bez zadání dalších modifikátorů typu obsahu, jsou modifikátory pravidel výjimek nadřazeny ostatním základním pravidlům pouze pro požadavky na dokument hlavního rámce (viz $document pro více informací o dokumentu hlavního rámve).
Např:
- Webová stránka
example.comobsahujeiframeodkazující naexample1.com. - Použije se pravidlo
#%#//console.log('test').
V tomto případě se log v konzole zobrazí dvakrát: jednou pro hlavní dokument rámce a jednou pro iframe.
Pokud přidáte pravidlo @@|||example.com^$jsinject, log se pro iframe zobrazí pouze jednou.
$content
Zakáže filtrování HTML, pravidla $hls, $replace a $jsonprune na stránkách, které odpovídají pravidlu.
Příklady
@@||example.com^$contentzakáže všechna pravidla pro úpravu obsahu na stránkáchexample.coma všech jích subdoménách.
$elemhide
Zakáže jakákoliv kosmetická pravidla na stránkách odpovídajících pravidlu.
Příklady
@@||example.com^$elemhidezakáže všechna kosmetická pravidla naexample.coma všech subdoménách.
Místo plného názvu modifikátoru můžete použít kratší název (alias): $ehide.
$extension
Zakáže konkrétní uživatelské skripty nebo všechny uživatelské skripty pro danou doménu.
Syntaxe
$extension[="userscript_name1"[|"userscript_name2"[|"userscript_name3"[...]]]]
userscript_name(i) označuje konkrétní název uživatelského skriptu, který má být modifikátorem zakázán. Modifikátor může obsahovat libovolný počet názvů uživatelských skriptů nebo žádný. V druhém případě modifikátor zakáže všechny uživatelské skripty.
Názvy uživatelských skriptů obvykle obsahují mezery nebo jiné speciální znaky, proto byste měli název uzavřít do uvozovek. Podporovány jsou jednoduché (') i dvojité (") uvozovky ASCII. Více názvů uživatelských skriptů by mělo být odděleno svislou čarou (|). Pokud je však název uživatelského skriptu tvořen jedním slovem bez speciálních znaků, lze jej použít bez uvozovek.
Uživatelské skripty můžete také vyloučit přidáním znaku ~ před hodnotu. V tomto případě nebude uživatelský skript modifikátorem zakázán.
$extension=~"userscript name"
Když vyloučíte uživatelský skript, musíte umístit znak ~ mimo uvozovky.
Pokud název uživatelského skriptu obsahuje uvozovky ("), čárky (,) nebo svislé čáry (|), musí být uvozen zpětným lomítkem (\).
$extension="userscript name\, with \"quote\""
Příklady
@@||example.com^$extension="AdGuard Assistant"zakáže uživatelský skriptAdGuard asistentnaexample.com.@@||example.com^$extension=MyUserscriptzakáže uživatelský skriptMyUserscriptnaexample.com.@@||example.com^$extension='AdGuard Assistant'|'AdGuard Popup Blocker'zakáže uživatelské skriptyAdGuard asistentaBlokátor vyskakovacích okenAdGuardnaexample.com.@@||example.com^$extension=~"AdGuard Assistant"zakáže všechny uživatelské skripty naexample.com, kroměAdGuard asistenta.@@||example.com^$extension=~"AdGuard Assistant"|~"AdGuard Popup Blocker"zakáže všechny uživatelské skripty naexample.com, kroměAdGuard asistentaaBlokátor vyskakovacích oken AdGuard.@@||example.com^$extensionžádné uživatelské skripty nebudou fungovat naexample.com.@@||example.com^$extension="AdGuard \"Assistant\""zakáže uživatelský skriptAdGuard "Asistant"naexample.com.
- Pouze AdGuard pro Windows, Mac a Android jsou technicky schopné používat pravidla s modifikátorem
$extension. - Pravidla s modifikátorem
$extensions konkrétním názvem uživatelského skriptu jsou podporována AdGuardem pro Windows, AdGuardem pro Mac, AdGuardem pro Android a AdGuardem pro Linux s CoreLibs v1.13 nebo novější.
$jsinject
Zakazuje přidávání JavaScript kódu na stránku. O pravidlech skripletů a javascriptu si můžete přečíst dále.
Příklady
@@||example.com^$jsinjectzakáže javasript naexample.coma všech subdoménách.
omezení modifikátoru $jsinject
Rules with the $jsinject modifier cannot be converted to DNR in AdGuard for Chrome MV3. Používáme je pouze v enginu TSUrlFilter, abychom zakázali některá kosmetická pravidla.
The $jsinject modifier is not supported by AdGuard for Chrome MV3 (yet) and AdGuard Content Blocker.
$stealth
Zakáže modul Ochrana před sledováním (dříve Režim utajení) pro všechny odpovídající stránky a požadavky.
Syntaxe
$stealth [= opt1 [| opt2 [| opt3 [...]]]]
opt(i) znamená určité možnosti Ochrany před sledováním deaktivované modifikátorem. Modifikátor může obsahovat libovolný počet specifických možností (viz níže) nebo žádnou. V druhém případě modifikátor vypne všechny funkce Ochrany před sledováním.
Seznam dostupných možností modifikátoru:
searchquerieszakáže možnost Skrýt vyhledávací dotazydonottrackzakáže možnost Požádat webové stránky, aby vás nesledovaly3p-cookiezakáže možnost Automatické odstranění cookies třetích stran1p-cookiezakáže možnost Automatické odstranění cookies aktuální stránky3p-cachezakáže možnost Zakázat mezipaměť pro požadavky třetích stran3p-authzakáže možnost Blokovat autorizační hlavičku třetích stranwebrtczakáže možnost Blokovat WebRTCpushzakáže možnost Blokovat Push APIlocationzakáže možnost Blokovat lokalizační APIflashzakáže možnost Blokovat Flashjavazakáže možnost Blokovat Javareferrerzakáže možnost Skrýt třetím stranám referenční IDuseragentzakáže možnost Skrýt agenta (identifikaci) Vašeho prohlížečeipzakáže možnost Skrýt IP adresuxclientdatazakáže možnost Odstranit X-Client-Data hlavičku z požadavků HTTPdpizakáže možnost Ochrana před DPI
Příklady
@@||example.com^$stealthzakáže Ochranu před sledováním pro požadavkyexample.com(a subdomény) s výjimkou blokování cookies a skrytí sledovacích parametrů (viz níže).@@||domain.com^$script,stealth,domain=example.comzakáže Ochranu před sledováním pouze pro požadavky skriptů nadomain.com(a subdoménách) naexample.coma subdoménách.@@||example.com^$stealth=3p-cookie|dpizakáže blokování cookies třetích stran a opatření pro oklamání DPI proexample.com.
Blokování cookies a odstranění sledovacích parametrů se provádí pomocí pravidel s modifikátory $cookie, $urltransform a $removeparam. Pravidla výjimek, která obsahují pouze modifikátor $stealth, tyto věci neprovedou. Pokud chcete pro danou doménu zcela zakázat všechny funkce Ochrany před sledováním, musíte uvést všechny tři modifikátory: @@||example.org^$stealth,removeparam,cookie.
- Možnosti modifikátoru musí být psány malými písmeny, tj.
$stealth=DPIbudou zamítnuty. - Možnosti modifikátoru nelze negovat, tj.
$stealth=~3p-cookiebude zamítnuto. - Rozšíření prohlížeče AdGuard podporuje pouze možnosti
searchqueries,donottrack,referrer,xclientdata,1p-cookiea3p-cookie.
- Ochrana před sledováním (dříve Režim utajení) je k dispozici v AdGuardu pro Windows, AdGuardu pro macOS, AdGuardu pro Android a Rozšíření prohlížeče AdGuard pro Firefox a prohlížeče založené na Chromium, kromě AdGuardu pro Chrome Manifest MV3. Všechny ostatní produkty budou ignorovat pravidla s modifikátorem
$stealth. - Pravidla s modifikátorem
$stealthjsou podporována AdGuardem pro Windows, AdGuardem pro Mac, AdGuardem pro Android a AdGuardem pro Linux s CoreLibs v1.10 nebo novějším a Rozšířením prohlížeče AdGuard s TSUrlFilter v3.0.0 nebo novějším. - V rozšíření prohlížeče AdGuard se příkaz Block WebRTC používá globálně a nelze jej ovládat pro jednotlivé stránky. Pravidla výjimek jako
$stealth=webrtcnemají žádný účinek.
$urlblock
Zakáže blokování všech požadavků odeslaných ze stránek, které odpovídají pravidlu a zakáže všechna pravidla $cookie.
Příklady
@@||example.com^$urlblock— nebudou blokovány žádné požadavky odeslané zexample.coma ze všech subdomén.
omezení modifikátoru $urlblock
V AdGuardu pro iOS a AdGuardu pro Safari fungují pravidla $urlblock jako $document exclusion — odblokování všeho.
Pravidla s modifikátorem $urlblock nejsou podporována Blokátorem obsahu AdGuard, AdGuardem pro Chrome MV3.
Generická pravidla
Než budeme moci přistoupit k dalším modifikátorům, musíme provést definici generických pravidel. Pravidlo je generické, pokud není omezeno na konkrétní domény. Podporován je také zástupný znak *.
Například tato pravidla jsou generická:
###banner
*###banner
#@#.adsblock
*#@#.adsblock
~domain.com###banner
||domain.com^
||domain.com^$domain=~example.com
A tato nejsou:
domain.com###banner
||domain.com^$domain=example.com
$genericblock
Zakáže generická základní pravidla na stránkách, které odpovídají pravidlu výjimky.
Příklady
@@||example.com^$genericblockzakáže generická základní pravidla naexample.coma všech subdoménách.
omezení modifikátoru $genericblock
V AdGuardu pro iOS a AdGuardu pro Safari fungují pravidla $genericblock jako $document exclusion — odblokování všeho.
Pravidla s modifikátorem $genericblock nejsou podporována Blokátorem obsahu AdGuard, AdGuardem pro Chrome MV3.
$generichide
Zakáže všechna generická kosmetická pravidla na stránkách, které odpovídají pravidlu výjimky.
Příklady
@@||example.com^$generichidezakáže všechna kosmetická pravidla naexample.coma jejích subdoménách.
Místo plného názvu modifikátoru můžete použít kratší název (alias): $ghide.
specifichide
Zakáže všechna specifická pravidla pro skrývání prvků a CSS, ale ne obecná pravidla. Má opačný účinek než $generichide.
Příklady
@@||example.org^$specifichidezakážeexample.org##.banner, ale ne##.banner.
Místo plného názvu modifikátoru můžete použít kratší název (alias): $shide.
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
Všechna kosmetická pravidla — nejen ta specifická — lze zakázat pomocí modifikátoru $elemhide.
:::
Pravidla s modifikátorem $specifichide nejsou AdGuardem pro iOS, Adguardem pro Safari a Blokátorem obsahu AdGuard podporována.
Pokročilé schopnosti
Tyto modifikátory mohou zcela změnit chování základních pravidel.
| Modifikátor \ Produkty | Aplikace CoreLibs | AdGuard pro Chromium | AdGuard pro Chrome MV3 | AdGuard pro Firefox | AdGuard pro iOS | AdGuard pro Safari | Blokátor obsahu AdGuard |
|---|---|---|---|---|---|---|---|
| $all | ✅ | ✅ | ✅ *[1] | ✅ | ✅ | ✅ | ❌ |
| $badfilter | ✅ | ✅ | ✅ *[2] | ✅ | ✅ | ✅ | ❌ |
| $cookie | ✅ | ✅ | ✅ *[3] | ✅ | ❌ | ❌ | ❌ |
| $csp | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| $hls | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| $inline-font | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| $inline-script | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| $jsonprune | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| $xmlprune | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| $network | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| $permissions | ✅ *[4] | ✅ | ✅ | ✅ *[4] | ❌ | ❌ | ❌ |
| $redirect | ✅ | ✅ | ✅ *[5] | ✅ | ❌ | ❌ | ❌ |
| $redirect-rule | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| $referrerpolicy | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| $removeheader | ✅ | ✅ *[7] | ✅ *[7] | ✅ *[7] | ❌ | ❌ | ❌ |
| $removeparam | ✅ | ✅ | ✅ *[6] | ✅ | ❌ | ❌ | ❌ |
| $replace | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
| $urltransform | ✅ | ✅ | ✅ *[8] | ✅ | ❌ | ❌ | ❌ |
| $reason | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| noop | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| $empty 👎 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| $mp4 👎 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
- ✅ — plně podporováno
- ✅ * — podporováno, ale spolehlivost se může lišit nebo se mohou vyskytnout omezení; více informací naleznete v popisu modifikátoru
- ❌ — nepodporováno
- 👎 — zastaralé; stále podporovano, ale v budoucnu bude odstraněno
$all
$all modifikátor je složen ze všech modifikátorů typů obsahu a $popup. Např. pravidlo ||example.org^$all se převádí na pravidlo:
||example.org^$document,subdocument,font,image,media,object,other,ping,script,stylesheet,websocket,xmlhttprequest,popup
Tento modifikátor nelze použít jako výjimku se znakem @@.
omezení modifikátoru $all
Vzhledem k tomu, že modifikátor $popup je součástí $all, modifikátor $all není podporován AdGuardem pro Chrome MV3 kcůli $popup omezením modifikátoru.
Pravidla s modifikátorem $all nejsou Blokátorem obsahu AdGuard podporována.
$badfilter
Pravidla s modifikátorem $badfilter vypnou ostatní základní pravidla, na která se vztahují. To znamená, že text vypnutého pravidla by měl odpovídat textu pravidla $badfilter (bez modifikátoru $badfilter).
Příklady
||example.com$badfilterzakáže||example.com||example.com$image,badfilterzakáže||example.com$image@@||example.com$badfilterzakáže@@||example.com||example.com$domain=domain.com,badfilterzakáže||example.com$domain=domain.com
Pravidla s modifikátorem $badfilter mohou zakázat další základní pravidla pro konkrétní domény, pokud splňují následující podmínky:
- Pravidlo má modifikátor
$domain - Pravidlo nemá hodnotu modifikátoru negované domény
~v$domain
V takovém případě pravidlo $badfilter zakáže odpovídající pravidlo pro domény uvedené v pravidlech $badfilter i v základních pravidlech. Upozorňujeme, že logika zástupných znaků TLD funguje i zde.
Příklady
/some$domain=example.com|example.org|example.ioje zakázána proexample.compomocí/some$domain=example.com,badfilter/some$domain=example.com|example.org|example.ioije zakázána proexample.comaexample.orgpomocí/some$domain=example.com|example.org,badfilter/some$domain=example.com|example.orga/some$domain=example.iojsou kompletně zakázány pomocí/some$domain=example.com|example.org|example.io,badfilter/some$domain=example.com|example.org|example.ioje kompletně zakázána pomocí/some$domain=example.*,badfilter/some$domain=example.*je zakázána proexample.comaexample.orgpomocí/some$domain=example.com|example.org,badfilter/some$domain=example.com|example.org|example.ioNENÍ zakázána proexample.compomocí/some$domain=example.com|~example.org,badfilter, protože hodnota modifikátoru$domainobsahuje negovanou doménu
omezení modifikátoru $badfilter
V AdGuardu pro Chrome MV3 se pravidlo s modifikátorem $badfilter použije v DNR pouze v případě, že úplně zruší zdrojové pravidlo. Nemůžeme ho vypočítat, pokud je zrušeno pouze částečně. Examples.
Pravidla s modifikátorem $badfilter nejsou Blokátorem obsahu AdGuard podporována.
$cookie
Modifikátor $cookie zcela mění chování pravidla. Namísto blokování požadavku, tento modifikátor potlačí AdGuard nebo změní záhlaví Cookie a Set-Cookie.
Vícenásobná pravidla odpovídajících jednomu požadavku
V případě, že jednomu požadavku odpovídá více pravidel $cookie, použijeme každé z nich.
Syntaxe
$cookie [= name[; maxAge = seconds [; sameSite = strategy ]]]
kde:
name— nepovinné, řetězec nebo regulární výraz pro přiřazení názvu cookie.seconds— počet sekund aktuálního času pro posunutí data vypršení platnosti souboru cookie.strategy— řetězec pro strategii Same-Site, která se má použít na cookies.
Např.
||example.org^$cookie=NAME;maxAge=3600;sameSite=lax
pokaždé, když AdGuard narazí na cookie s názvem NAME v požadavku na example.org, provede následující kroky:
- Nastaví datum vypršení platnosti na aktuální čas plus
3600sekund - Přiměje cookie použít "laxní" strategii Same-Site.
Uvození speciálních znaků
Pokud je pro porovnání použit regulární výraz name, musí být dva znaky uvozeny: čárka , a znak dolaru $. Každý z nich označte zpětným lomítkem \. Např. uvozená čárka vypadá takto: \,.
Příklady
||example.org^$cookieblokuje všechny soubory cookie nastavené doménouexample.org; to je ekvivalent nastavenímaxAge=0$cookie=__cfduidblokuje všude soubory cookie CloudFlare$cookie=/__utm[a-z]/blokuje všude soubory cookie Google Analytics||facebook.com^$third-party,cookie=c_userbrání Facebooku ve sledování, i když jste přihlášeni
Existují dva způsoby, jak deaktivovat pravidla $cookie: primární metoda zahrnuje použití výjimky označené @@ — @@||example.org^$cookie. Alternativní metoda využívá výjimku $urlblock (také zahrnutou pod aliasem výjimky $document — $elemhide,jsinject,content,urlblock,extension). Funguje to takto:
@@||example.org^$cookieodblokuje všechny soubory cookie nastavené doménouexample.org@@||example.org^$urlblockodblokuje všechny cookies nastavené doménouexample.orga zakáže blokování všech požadavků odeslaných zexample.org@@||example.org^$cookie=conceptodblokuje jeden soubor cookie s názvemconcept@@||example.org^$cookie=/^_ga_/odblokuje každý soubor cookie, který odpovídá regulárnímu výrazu
omezení modifikátoru $cookie
V AdGuardu pro Chrome MV3 odstraňujeme soubory cookies 2 způsoby: ze strany content-script (ke které máme přístup) a z onBeforeSendHeaders posluchače. Vzhledem k tomu, že onBeforeSendHeaders a další posluchači již nejsou blokováni, je nemůžeme ve všech případech smazat. Pomocí tohoto testu můžete zkontrolovat, zda pravidlo funguje.
Pravidla $cookie podporují tři typy modifikátorů: $domain, $~domain, $important, $third-party, $~third-party, strict-third-party a strict-first-party.
Pravidla s modifikátorem $cookie nejsou podporována Blokátorem obsahu AdGuard, AdGuardem pro iOS a AdGuardem pro Safari.
$csp
Tento modifikátor zcela mění chování pravidla. Pokud je použitý na pravidlo, pravidlo nezablokuje odpovídající požadavek. Namísto toho se upraví záhlaví odpovědí.
Pro použití tohoto typu pravidel je nutné mít základní znalosti o vrstvě zabezpečení Content Security Policy.
U požadavků, které odpovídají pravidlu $csp, posílíme zásady zabezpečení odezvy posílením zásad zabezpečení obsahu, podobně jako u zásad zabezpečení obsahu modifikátoru obsahu $csp. Pravidla $csp jsou aplikována nezávisle na jakémkoli jiném typu pravidla. Mohou je ovlivnit pouze výjimky na úrovni dokumentu (viz část s příklady), ale žádná jiná základní pravidla.
Vícenásobná pravidla odpovídajících jednomu požadavku
V případě, že jednomu požadavku odpovídá více pravidel $csp, použijeme každé z nich.
Syntaxe
Syntaxe hodnoty $csp je podobná syntaxi záhlaví Content Security Policy.
Hodnota $csp může být v případě pravidel pro výjimky prázdná. Viz níže uvedený oddíl s příklady.
Příklady
||example.org^$csp=frame-src 'none'blokuje všechny obrázky na example.org a jejích subdoménách.@@||example.org/page/*$csp=frame-src 'none'zakáže všechna pravidla s modifikátorem$csppřesně odpovídajícím příznakemframe-src 'none'na všech stránkách odpovídajících vzoru pravidla. Např. výše uvedené pravidlo.@@||example.org/page/*$cspzakáže všechna pravidla$cspna všech stránkách odpovídajících vzoru pravidla.||example.org^$csp=script-src 'self' 'unsafe-eval' http: https:zakáže vložené skripty na všech stránkách odpovídajících vzoru pravidla.@@||example.org^$documentnebo@@||example.org^$urlblockzakáží všechna pravidla$cspna všech stránkách odpovídajících vzoru pravidla.
- V hodnotě
$cspje zakázáno několik znaků:,,$. $csppravidla podporují tři typy modifikátorů:$domain,$important,$subdocument.- Pravidla s direktivami
report-*jsou považována za neplatná.
Pravidla s modifikátorem $csp nejsou podporována Blokátorem obsahu AdGuard, AdGuardem pro iOS a AdGuardem pro Safari.
$hls
Pravidla $hls upravují odpověď na shodný požadavek. Jsou určena k pohodlnému odstraňování segmentů ze seznamů stop HLS playlists (RFC 8216).
Slovo "segment" v tomto dokumentu znamená buď "mediální segment" nebo "seznam skladeb" jako součást "hlavního seznamu skladeb": pravidla $hls nerozlišují mezi "hlavním seznamem skladeb" a "mediálním seznamem skladeb".
Syntaxe
||example.org^$hls=urlpatternodstraní segmenty, jejichž adresa URL odpovídá vzoru adresy URLurlpattern. Vzor funguje stejně jako v základních pravidlech pro URL adresy, ale znaky/,$a,musí být uvozeny pomocí\uvnitřurlpattern.||example.org^$hls=/regexp/optionsodstraní segmenty, kde URL nebo jeden ze znaků (u určitých možností, pokud jsou přítomny) odpovídá regulárnímu výrazuregexp. K dispozici jsou tyto možnostioptions:t— namísto testování adresy URL segmentu otestujte každý znak segmentu podle regulárního výrazu. Segment se shodným znakem je odstraněn;i— regulární výraz nerozlišuje velká a malá písmena.
Znaky /, $ a , musí být uvnitř regexp uvozeny pomocí \.
Výjimky
Základní výjimky URL nesmí zakázat pravidla s modifikátorem $hls. Lze je zakázat, jak je popsáno níže:
@@||example.org^$hlszakáže všechna pravidla$hlspro odpovědi z URL odpovídajících||example.org^.@@||example.org^$hls=textzakáže všechna pravidla$hlss hodnotou modifikátoru$hlsshodným stextpro odpovědi z URL odpovídajících||example.org^.
Pravidla $hls lze také zakázat pravidly výjimek $document, $content a $urlblock.
Když vícenásobná pravidla $hls odpovídají stejnému požadavku, jejich účinek je kumulativní.
Příklady
||example.org^$hls=\/videoplayback^?*&source=dclk_video_adsodstraní všechny segmenty se shodnou URL.||example.org^$hls=/\/videoplayback\/?\?.*\&source=dclk_video_ads/idosáhne víceméně téhož pomocí regulárního výrazu namísto vzoru URL.||example.org^$hls=/#UPLYNK-SEGMENT:.*\,ad/todstraní všechny segmenty, které mají odpovídající znak.
Anatomie seznamu stop HLS
Stručné shrnutí specifikace:
- Seznam stop HLS je kolekce textových řádků
- Řádek může být prázdný, komentář (začíná
#), znak (také začíná#, lze jej rozpoznat pouze podle názvu) nebo URL - Řádek URL se nazývá "segment"
- Znaky se mohou vztahovat na jeden segment, tj. první řádek adresy URL za znakem, na všechny segmenty následující za znakem až do znaku se stejným názvem nebo na celý seznam skladeb
Některé specifické body týkající se fungování pravidel $hls:
- Při odstranění segmentu se odstraní také všechny znaky, které se vztahují pouze k tomuto segmentu
- Pokud se znak vztahuje na více segmentů a všechny tyto segmenty jsou odstraněny, je odstraněna i znak
- Protože neexistuje způsob, jak rozpoznat různé druhy znaků podle syntaxe, rozpoznáváme všechny znaky uvedené v RFC a některé nestandardní znaky, se kterými jsme se setkali v praxi. Všechny řádky začínající na
#. Ty, které nejsou rozpoznány jako znak, jsou předány bez úprav a nejsou porovnávány s pravidly - Značky nebudou přiřazeny, pokud se vztahují na celý seznam stop a k jejich odstranění nelze použít pravidla
$hls, protože tyto typy pravidel jsou určeny pro odstraňování segmentů. Pokud víte, co děláte, můžete pomocí pravidel$replaceodstranit nebo přepsat pouze jeden znak ze seznamu skladeb
Příklad transformace provedené podle pravidel:
Původní odezva
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF,5
preroll.ts
#UPLYNK-SEGMENT:abc123,ad
#UPLYNK-KEY:aabb1122
#EXT-X-DISCONTINUITY
#EXTINF,10
01.ts
#EXTINF,10
02.ts
#UPLYNK-SEGMENT:abc123,segment
#UPLYNK-KEY:ccdd2233
#EXT-X-DISCONTINUITY
#EXTINF,10
01.ts
#EXTINF,10
02.ts
#EXT-X-ENDLIST
Použitá pravidla
||example.org^$hls=preroll
||example.org^$hls=/#UPLYNK-SEGMENT:.*\,ad/t
Modifikovaná odpověď
#EXTM3U
#EXT-X-TARGETDURATION:10
#UPLYNK-SEGMENT:abc123,segment
#UPLYNK-KEY:ccdd2233
#EXT-X-DISCONTINUITY
#EXTINF,10
01.ts
#EXTINF,10
02.ts
#EXT-X-ENDLIST
- Pravidla s modifikátorem
$hlslze použít pouze v důvěryhodných filtrech. $hlspravidla jsou kompatibilní pouze s těmito modifikátory:$domain,$third-party,$strict-third-party,$strict-first-party,$app,$important,$match-casea$xmlhttprequest.$hlspravidla platí pouze pro seznamy stop HLS, což je text kódovaný v UTF-8 začínající řádkem#EXTM3U. Jakákoli jiná odpověď nebude těmito pravidly upravena.- Pravidla
$hlsneplatí, pokud je velikost původní odpovědi větší než 10 MB.
Pravidla s modifikátorem $hls jsou podporována AdGuardem pro Windows, Mac, Android a Linux s CoreLibs v1.10 nebo novější.
$inline-script
Modifikátor $inline-script je určen k blokování in-line JavaScriptu vloženého do webové stránky pomocí zásad zabezpečení obsahu (CSP). Zlepšuje zabezpečení a soukromí tím, že zabraňuje použití in-line reklam nebo potenciálně škodlivých skriptů. Pravidlo ||example.org^$inline-script se převádí na syntaxi pravidel CSP:
||example.org^$csp=script-src 'self' 'unsafe-eval' http: https: data: blob: mediastream: filesystem:
$inline-font
Modifikátor $inline-font je určen k blokování in-line fontů vložených do webové stránky pomocí zásad zabezpečení obsahu (CSP). Zlepšuje zabezpečení a soukromí tím, že zabraňuje použití in-line fontů, které by mohly být použity ke shromažďování dat a čtení digitálních otisků. Pravidlo ||example.org^$inline-font se převádí na syntaxi pravidel CSP:
||example.org^$csp=font-src 'self' 'unsafe-eval' http: https: data: blob: mediastream: filesystem:
$jsonprune
Pravidla $jsonprune upravují odpověď na odpovídající požadavek odstraněním položek JSON, které odpovídají upravenému výrazu JSONPath. Nemění odpovědi, které nejsou platnými dokumenty JSON.
V AdGuardu pro Windows, Mac a Android s CoreLibs v1.11 nebo novější, $jsonprune podporuje také úpravu dokumentů JSONP (padded JSON).
Syntaxe
||example.org^$jsonprune=expressionodstraní z odpovědi položky, které odpovídají upravenému výrazu JSONPathexpression.
Vzhledem ke způsobu zpracování pravidel musí být znaky $ a , uvnitř výrazu uvozeny pomocí \.
Upravená syntaxe JSONPath má oproti původní následující rozdíly:
- Výrazy skriptů nejsou podporovány
- Podporované výrazy filtrů jsou:
?(has <key>)— "true", pokud má aktuální objekt zadaný klíč?(key-eq <key> <value>)— "true", pokud má aktuální objekt zadaný klíč a jeho hodnota se rovná zadané hodnotě?(key-substr <key> <value>)— "true", pokud je zadaná hodnota podřetězcem hodnoty zadaného klíče aktuálního objektu
- Mezery mimo řetězce s dvojitými nebo jednoduchými uvozovkami nemají žádný význam
- Lze použít řetězce s dvojitými i jednoduchými uvozovkami
- Výrazy končící na
..nejsou podporovány - V hranatých závorkách lze zadat vícero dílků pole
Existují různé online nástroje, které usnadňují práci s výrazy JSONPath:
https://www.site24x7.com/tools/jsonpath-finder-validator.html https://jsonpathfinder.com/ https://jsonpath.com/
Mějte však na paměti, že všechny implementace JSONPath mají jedinečné vlastnosti a jsou vzájemně nekompatibilní.
Výjimky
Základní výjimky URL nesmí zakázat pravidla s modifikátorem $jsonprune. Lze je zakázat, jak je popsáno níže:
@@||example.org^$jsonprunezakáže všechna pravidla$jsonprunepro odpovědi z URL odpovídajících||example.org^.@@||example.org^$jsonprune=textzakáže všechna pravidla$jsonprunes hodnotou modifikátoru$jsonpruneshodným stextpro odpovědi z URL odpovídajících||example.org^.
Pravidla $jsonprune lze také zakázat pravidly výjimek $document, $content a $urlblock.
Když vícenásobná pravidla $jsonprune odpovídají stejnému požadavku, jsou seřazena v lexikografickém pořadí, první pravidlo je aplikováno na původní odpověď a každé ze zbývajících pravidel je aplikováno na výsledek použití předchozího.
Příklady
||example.org^$jsonprune=\$..[one\, "two three"]odstraní všechny výskyty klíčů "one" a "two three" kdekoli v dokumentu JSON.
Vstup
{
"one": 1,
"two": {
"two three": 23,
"four five": 45
}
}
Výstup
{
"two": {
"four five": 45
}
}
||example.org^$jsonprune=\$.a[?(has ad_origin)]odstraní všechny potomkya, které mají klíčad_origin.
Vstup
{
"a": [
{
"ad_origin": "https://example.org",
"b": 42
},
{
"b": 1234
}
]
}
Výstup
{
"a": [
{
"b": 1234
}
]
}
||example.org^$jsonprune=\$.*.*[?(key-eq 'Some key' 'Some value')]odstraní všechny položky, které jsou na úrovni vnoření 3 a mají vlastnost "Some key" rovnu "Some value".
Vstup
{
"a": {"b": {"c": {"Some key": "Some value"}, "d": {"Some key": "Other value"}}},
"e": {"f": [{"Some key": "Some value"}, {"Some key": "Other value"}]}
}
Výstup
{
"a": {"b": {"d": {"Some key": "Other value"}}},
"e": {"f": [{"Some key": "Other value"}]}
}
Vnořené výrazy JSONPath
V AdGuardu pro Windows, Mac a Android s CoreLibs v1.11 nebo novější, lze výrazy JSONPath použít jako klíče ve výrazech filtru.
||example.org^$jsonprune=\$.elems[?(má "\$.abc")]odstraní všechny potomkyelems, které mají vlastnost volitelnou výrazem JSONPath$.abc.
Vstup
{
"elems": [
{
"a": {"b": {"c": 123}},
"k": "v"
},
{
"d": {"e": {"f": 123}},
"k1": "v1"
}
]
}
Výstup
{
"elems": [
{
"d": {"e": {"f": 123}},
"k1": "v1"
}
]
}
||example.org^$jsonprune=\$.elems[?(key-eq "\$.a.b.c" "abc")]odstraní všechny potomkyelems, které mají vlastnost volitelnou pomocí výrazu JSONPath$.a.b.cs hodnotou rovnou"abc".
Vstup
{
"elems": [
{
"a": {"b": {"c": 123}}
},
{
"a": {"b": {"c": "abc"}}
}
]
}
Výstup
{
"elems": [
{
"a": {"b": {"c": 123}}
}
]
}
$jsonprunepravidla jsou kompatibilní pouze s těmito modifikátory:$domain,$third-party,$strict-third-party,$strict-first-party,$app,$important,$match-casea$xmlhttprequest.- Pravidla
$jsonpruneneplatí, pokud je velikost původní odpovědi větší než 10 MB.
Pravidla s modifikátorem $jsonprune jsou podporována AdGuardem pro Windows, Mac, Android a Linux s CoreLibs v1.10 nebo novější.
$xmlprune
Pravidla $xmlprune upravují odpověď na odpovídající požadavek odstraněním položek XML, které odpovídají upravenému výrazuXPath 1.0. Výraz musí vrátit node-set. $xmlprune pravidla neupravují odpovědi, které nejsou dobře formulovanými dokumenty XML.
Syntaxe
||example.org^$xmlprune=expressionodstraní z odpovědi položky, které odpovídají výrazu XPathexpression.
Vzhledem ke způsobu zpracování pravidel musí být znaky $ a , uvnitř výrazu uvozeny pomocí \.
Výjimky
Základní výjimky URL nesmí zakázat pravidla s modifikátorem $xmlprune. Lze je zakázat, jak je popsáno níže:
@@||example.org^$xmlprunezakáže všechna pravidla$xmlprunepro odpovědi z URL odpovídajících||example.org^.@@||example.org^$xmlprune=textzakáže všechna pravidla$xmlprunes hodnotou modifikátoru$xmlpruneshodným stextpro odpovědi z URL odpovídajících||example.org^.
Pravidla $xmlprune lze také zakázat pravidly výjimek $document, $content a $urlblock.
Když je více pravidel $xmlprune odpovídá stejnému požadavku, jsou použita v lexikografickém pořadí.
Příklady
||example.org^$xmlprune=/bookstore/book[position() mod 2 = 1]odstraní z knihkupectví knihy s lichými čísly.
Vstup
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="web">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
Výstup
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
||example.org^$xmlprune=/bookstore/book[year = 2003]odstraní knihy z roku 2003 z knihkupectví.
Vstup
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="web">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
Výstup
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
||example.org^$xmlprune=//*/@*odstraní všechny atributy ze všech prvků.
Vstup
<?xml version="1.0" encoding="UTF-8"?>
<bookstore location="cy">
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
</bookstore>
Výstup
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
</bookstore>
$xmlprunepravidla jsou kompatibilní pouze s těmito modifikátory:$domain,$third-party,$strict-third-party,$strict-first-party,$app,$important,$match-casea$xmlhttprequest.- Pravidla
$xmlpruneneplatí, pokud je velikost původní odpovědi větší než 10 MB.
Pravidla s modifikátorem $xmlprune jsou podporována AdGuardem pro Windows, Mac, Android a Linux s CoreLibs v1.15 nebo novější.
$network
Jedná se v podstatě o pravidla typu brány Firewall, která umožňují plně zablokovat nebo odblokovat přístup na zadanou vzdálenou adresu.
- Pravidla
$networkodpovídají pouze IP adresám! Nelze je použít k zablokování nebo odblokování přístupu k doméně. - Chcete-li se shodovat s adresou IPv6, musíte použít sbalenou syntaxi, např.
[2001:4860:4860::8888]$networknamísto[2001:4860:4860:0:0:0:0:8888]$network. - Pravidlo seznamu povolených
$networkzpůsobí, že AdGuard bude obcházet data odpovídajícího koncového bodu, proto nebude provádět žádné další filtrování. - Pokud část IP začíná a končí znakem
/, je považována za regulární výraz.
Pro lepší pochopení regulárních výrazů doporučujeme seznámit se s tímto článkem.
Modifikátor $network lze v pravidlech použít pouze společně s modifikátory $app a $important, nikoli s žádnými jinými modifikátory.
Příklady
174.129.166.49:3478^$networkblokuje přístup k174.129.166.49:3478(ale ne k174.129.166.49:34788).[2001:4860:4860::8888]:443^$networkblokuje přístup k[2001:4860:4860::8888]:443.174.129.166.49$networkblokuje přístup k174.129.166.49:*.@@174.129.166.49$networkzpůsobí, že AdGuard bude koncovému bodu předávat data. Žádná jiná pravidla se neuplatňují./.+:3[0-9]{4}/$networkblokuje přístup k libovolnému portu od 30000 do 39999./8.8.8.(:?8|4)/$networkblokuje přístup k8.8.8.8a8.8.8.4.
Pouze AdGuard pro Windows, Mac a Android jsou technicky schopné používat pravidla s modifikátorem $network.
$permissions
Tento modifikátor zcela mění chování pravidla. Pokud je použitý na pravidlo, pravidlo nezablokuje odpovídající požadavek. Namísto toho se upraví záhlaví odpovědí.
Pro použití tohoto typu pravidel je nutné mít základní znalosti o vrstvě zabezpečení Permissions Policy.
U požadavků, které odpovídají pravidlu $permissions, AdGuard posiluje zásady funkcí odpovědi přidáním dalších zásad oprávnění, které se rovnají obsahu modifikátoru $permissions. Pravidla $permissions jsou aplikována nezávisle na jakémkoli jiném typu pravidla. Mohou je ovlivnit pouze výjimky na úrovni dokumentu (viz část s příklady), ale žádná jiná základní pravidla.
Syntaxe
Hodnota syntaxe $permissions je shodná se syntaxí záhlaví Permissions-Policy s následujícími výjimkami:
- Čárka, která odděluje více prvků MUSÍ být uvozena – viz příklady níže.
- Místo čárky lze pro oddělení funkcí použít znak
(|).
Seznam dostupných direktiv je k dispozici v Zásadách oprávnění.
Hodnota $permissions může být v případě pravidel pro výjimky prázdná — viz příklady níže.
Příklady
||example.org^$permissions=autoplay=()zakáže automatické přehrávání médií vyžádaných prostřednictvím rozhraníHTMLMediaElementv rámciexample.org.@@||example.org/page/*$permissions=autoplay=()zakáže všechna pravidla s modifikátorem$permissionspřesně odpovídajícím příznakemautoplay=()na všech stránkách odpovídajících vzoru pravidla. Např. výše uvedené pravidlo. Je důležité si uvědomit, že pravidlo výjimky se projeví pouze v případě přesné shody hodnot. Pokud například chcete zakázat pravidlo$permissions=a=()\,b=(), potřebujete pravidlo výjimky@@$permissions=a=()\,b=()a ne@@$permissions=b=()\,a=()ani@@$permissions=b=(), protožeb=()\,a=()nebob=()neodpovídáa=()\,b=().@@||example.org/page/*$permissionszakáže všechna pravidla$permissionsna všech stránkách odpovídajících vzoru pravidla.$domain=example.org|example.com,permissions=storage-access=()\, camera=()zakáže použití API pro přístup k úložišti pro vyžádání přístupu k nerozděleným souborům cookies a používání vstupních zařízení videa napříčexample.orgaexample.com.$domain=example.org|example.com,permissions=storage-access=()|camera=()dělá totéž — místo čárky lze k oddělení funkcí použít|.@@||example.org^$documentnebo@@||example.org^$urlblockzakáží všechna pravidla$permissionna všech stránkách odpovídajících vzoru pravidla.
Pravidla $permissions jsou účinná pouze pro požadavky hlavního rámce a vedlejšího rámce. To znamená, že se použijí při načtení stránky nebo iframe.
Pokud existuje více pravidel $permissions, která odpovídají stejnému požadavku, bude do odpovědi přidáno více záhlaví Permissions-Policy pro každé pravidlo s jejich hodnotou $permissions. Pokud tedy máte dvě pravidla: ||example.org^$permissions=autoplay=() a ||example.org^$permissions=geolocation=()\,camera=(), která odpovídají stejnému požadavku, bude odpověď obsahovat dvě záhlaví Permissions-Policy: autoplay=() a geolocation=()\,camera=().
omezení modifikátoru $permissions
Firefox ignoruje záhlaví Permissions-Policy. Další informace naleznete v tomto hlášení.
- Zakázané znaky v
$permissionshodnotě:$. $permissionsje kompatibilní s omezenou sadou modifikátorů:$domain,$important,$subdocumenta modifikátory typu obsahu.- Pravidla
$permissions, která neobsahují žádné modifikátory typu obsahu , budou odpovídat pouze požadavkům, jejichž typem obsahu jedocument.
- Pravidla s modifikátorem
$permissionsjsou podporována AdGuardem pro Windows, AdGuardem pro Mac, AdGuardem pro Android a AdGuardem pro Linux s CoreLibs v1.11 nebo novějším a rozšířením prohlížeče AdGuard s TSUrlFilter v3.0.0 nebo novějším. - Oddělovač
|místo uvozené čárky je podporován AdGuardem pro Windows, AdGuardem pro macOS, AdGuardem pro Android a AdGuardem pro Linux s CoreLibs v1.14 nebo novějším a rozšířením prohlížeče AdGuard s TSUrlFilter v3.0.0 nebo novějším.
$redirect
AdGuard je schopen přesměrovat webové požadavky na místní "zdroj".
Syntaxe
AdGuard používá stejnou syntaxi pravidel filtrování jako uBlock Origin. Je také kompatibilní s modifikátorem ABP $rewrite=abp-resource.
$redirect je modifikátor pro základní pravidla filtrování, takže pravidla s tímto modifikátorem podporují všechny ostatní základní modifikátory, jako jsou $domain, $third-party, $script atd.
Hodnota modifikátoru $redirect musí být název zdroje, který bude použit pro přesměrování.
Zakázání pravidel $redirect
||example.org/script.js$script,redirect=noopjs— toto pravidlo přesměruje všechny požadavky naexample.org/script.jsna zdroj s názvemnoopjs.||example.org/test.mp4$media,redirect=noopmp4-1s— toto pravidlo přesměruje všechny požadavky naexample.org/test.mp4na zdroj s názvemnoopmp4-1s.@@||example.org^$redirectzakáže všechna pravidla$redirectpro URL adresy, které odpovídají||example.org^.@@||example.org^$redirect=nooptextzakáže všechna pravidla s$redirect=nooptextpro všechny požadavky, které odpovídají||example.org^.
Další informace o přesměrování a použití jsou k dispozici na GitHubu.
Priority pravidel $redirect
Pravidla $redirect mají vyšší prioritu než běžná základní pravidla blokování. To znamená, že pokud existuje základní pravidlo blokování, pravidlo $redirect jej přepíše. Pravidla seznamu povolených se znakem @@ mají vyšší prioritu než pravidla $redirect. Pokud se základní pravidlo s modifikátorem $important a pravidlem $redirect shoduje se stejnou adresou URL, je druhé pravidlo přepsáno, pokud není též označeno jako $important.
Ve zkratce: $important > @@ > $redirect > basic rules.
Další podrobnosti najdete v prioritách pravidel.
omezení modifikátoru $redirect
V AdGuardu pro Chrome MV3 nejsou podporována pravidla $redirect.
- Pravidla s modifikátorem
$redirectnejsou podporována Blokátorem obsahu AdGuard, AdGuardem pro iOS a AdGuardem pro Safari. $redirectv uBlock Origin podporuje zadané priority, např.$redirect=noopjs:42. AdGuard to nepodporuje a místo toho pouze zahodí prioritní postfix.
$redirect-rule
Toto je v podstatě alias $redirect, protože má stejné hodnoty "přesměrování" a logika je téměř podobná. Rozdíl je v tom, že $redirect-rule se použije pouze v případě, kdy je cílový požadavek blokován jiným základním pravidlem.
Další podrobnosti najdete v prioritách pravidel.
Negace $redirect-rule funguje úplně stejně jako u běžných pravidel $redirect. Ještě více než to, bude @@||example.org^$redirect negovat jak pravidla $redirect, tak $redirect-rule.
Příklady
||example.org/script.js
||example.org^$redirect-rule=noopjs
V tomto případě budou pouze požadavky na example.org/script.js "přesměrovány" na noopjs. Všechny ostatní požadavky na example.org zůstanou nedotčeny.
Pravidla s modifikátorem $redirect-rule nejsou podporována Blokátorem obsahu AdGuard, AdGuardem pro iOS, AdGuardem pro Safari a AdGuardem pro Chrome MV3. Diskuse o přidání podpory pro pravidla $redirect-rule v rozšířeních Chrome MV3 je aktuálně otevřená.
$referrerpolicy
Tato pravidla umožňují přepsat zásady odkazovačů stránky. V odezvách na shodné požadavky budou všechny hlavičky Referrer-Policy nahrazeny jedinou hlavičkou s hodnotou rovnou hodnotě modifikátoru shodného pravidla. Pokud odezva obsahuje dokument HTML se značkou <meta name="referrer"..., atribut content značky bude také nahrazen hodnotou modifikátoru.
Pravidlo výjimky s hodnotou modifikátoru zakáže pravidlo blokování se stejnou hodnotou modifikátoru. Pravidlo výjimky bez hodnoty modifikátoru zakáže všechna odpovídající pravidla zásad odkazování.
Pokud požadavek odpovídá více pravidlům $referrerpolicy, která nejsou zakázána výjimkami, použije se pouze jedno z nich (není uvedeno, které). $referrerpolicy pravidla bez specifikovaných modifikátorů typu obsahu platí pro $document a $subdocument typy obsahu.
Příklady
||example.com^$referrerpolicy=unsafe-urlpřepíše zásady odkazování proexample.compomocíunsafe-url.@@||example.com^$referrerpolicy=unsafe-urlzakáže předchozí pravidlo.@@||example.com/abcd.html^$referrerpolicyzakáže všechna pravidla$referrerpolicynaexample.com/abcd.html.
Pravidla s modifikátorem $referrerpolicy jsou podporována AdGuardem pro Windows, Mac, Android a Linux s CoreLibs v1.12 nebo novější.
$removeheader
Pravidla s modifikátorem $removeheader jsou určena k odstranění záhlaví z požadavků a odpovědí HTTP. Původní motivací pro tento typ pravidla je možnost zbavit se záhlaví Refresh, které se často používá k přesměrování uživatelů na nežádoucí místo. To však není jediný případ, kdy může být tento modifikátor užitečný.
Stejně jako $csp, $redirect, $removeparam a $cookie i tento modifikátor existuje samostatně, pravidla s ním nezávisí na běžných základních pravidlech, tj. pravidelná výjimka nebo pravidla blokování jej neovlivní. Ve výchozím nastavení ovlivňuje pouze záhlaví odpovědí. Můžete jej však také změnit tak, aby odstraňoval hlavičky z požadavků HTTP.
Syntaxe
Základní syntaxe
||example.org^$removeheader=header-nameodstraní odpověď záhlaví s názvemheader-name||example.org^$removeheader=request:header-nameodstraní požadavek záhlaví s názvemheader-name
$removeheader nerozlišuje velká a malá písmena, doporučujeme vždy používat malá písmena.
Negace $removeheader
Tento typ pravidel funguje v podstatě stejně jako u modifikátorů $csp a $redirect.
K negaci $removeheader použijte @@:
@@||example.org^$removeheaderneguje všechna pravidla$removeheaderpro URL adresy, které odpovídají||example.org^.@@||example.org^$removeheader=headerneguje všechna pravidla s$removeheader=headerpro jakýkoliv požadavek, který odpovídá||example.org^.
Pravidla $removeheader lze také zakázat pravidly výjimek $document a $urlblock. Základní pravidla pro výjimky bez modifikátorů to však nedělají. Např. @@||example.com^ nezakáže $removeheader=p pro požadavky na example.com, ale @@||example.com^$urlblock ano.
V případě, že jednomu požadavku odpovídá více pravidel $removeheader, použijeme každé z nich.
Příklady
-
||example.org^$removeheader=refreshodstraní záhlavíRefreshze všech HTTP odpovědí vrácených doménouexample.orga jejími subdoménami. -
||example.org^$removeheader=request:x-client-dataodstraní záhlavíX-Client-Dataze všech požadavků HTTP. -
Další blok pravidel odstraní záhlaví
RefreshaLocationze všech odpovědí HTTP vrácených doménouexample.orgs výjimkou požadavků naexample.org/path/*, u kterých nebudou odstraněny žádné záhlaví:||example.org^$removeheader=refresh||example.org^$removeheader=location@@||example.org/path/$removeheader
omezení modifikátoru $removeheader
AdGuard pro Chrome MV3 má některá omezení:
-
Pravidla negace a seznamu povolených nejsou podporována.
-
Skupina podobných
$removeheaderpravidel bude sloučena do jednoho dekorativního pravidla. Např:||testcases.adguard.com$xmlhttprequest,removeheader=p1case1||testcases.adguard.com$xmlhttprequest,removeheader=P2Case1$xmlhttprequest,removeheader=p1case2$xmlhttprequest,removeheader=P2case2je převedeno na
[{"id": 1,"action": {"type": "modifyHeaders","responseHeaders": [{"header": "p1case1","operation": "remove"},{"header": "P2Case1","operation": "remove"},]},"condition": {"urlFilter": "||testcases.adguard.com","resourceTypes": ["xmlhttprequest"]}},{"id": 2,"action": {"type": "modifyHeaders","responseHeaders": [{"header": "p1case2","operation": "remove"},{"header": "P2case2","operation": "remove"}]},"condition": {"resourceTypes": ["xmlhttprequest"]}}]
Tento typ pravidel lze použít pouze v důvěryhodných filtrech.
-
Aby nedošlo k narušení bezpečnosti, nelze z níže uvedeného seznamu odstranit záhlaví
$removeheader:access-control-allow-originaccess-control-allow-credentialsaccess-control-allow-headersaccess-control-allow-methodsaccess-control-expose-headersaccess-control-max-ageaccess-control-request-headersaccess-control-request-methodorigintiming-allow-originallowcross-origin-embedder-policycross-origin-opener-policycross-origin-resource-policycontent-security-policycontent-security-policy-report-onlyexpect-ctfeature-policyorigin-isolationstrict-transport-securityupgrade-insecure-requestsx-content-type-optionsx-download-optionsx-frame-optionsx-permitted-cross-domain-policiesx-powered-byx-xss-protectionpublic-key-pinspublic-key-pins-report-onlysec-websocket-keysec-websocket-extensionssec-websocket-acceptsec-websocket-protocolsec-websocket-versionp3psec-fetch-modesec-fetch-destsec-fetch-sitesec-fetch-userreferrer-policycontent-typecontent-lengthacceptaccept-encodinghostconnectiontransfer-encodingupgrade
-
$removeheaderpravidla jsou kompatibilní pouze s těmito modifikátory:$domain,$third-party,$strict-third-party,$strict-first-party,$app,$important,$match-casea modifikátory typu obsahu jako$scripta$stylesheet. Pravidla s jinými modifikátory jsou považována za neplatná a budou vyřazena.
Pravidla s modifikátorem $removeheader podporuje AdGuard pro Windows, Mac, Android a Rozšíření prohlížeče AdGuard pro Chrome, Firefox a Edge.
$removeparam
$queryprune je alias $removeparam. Protože je $queryprune zastaralý, nepoužívejte jej a místo něj použijte $removeparam.
Pravidla s modifikátorem $removeparam jsou určena k odstranění parametrů dotazu z požadavků adres URL. Upozorňujeme, že tato pravidla se vztahují pouze na požadavky GET, HEAD, OPTIONS a někdy POST.
Syntaxe
Základní syntaxe
$removeparam=paramodstraní parametr dotazu s názvemparamz URL libovolného požadavku, např. požadavek nahttps://example.com/page?param=1&another=2bude transformován nahttps://example.com/page?another=2.
Regulární výrazy
Regulární výrazy můžete použít také k porovnání parametrů dotazu a/nebo jejich hodnot:
$removeparam=/regexp/[options]— odstraní parametry dotazu, které odpovídají regulárnímu výrazuregexpz adres URL jakéhokoli požadavku. Na rozdíl od základní syntaxe to znamená "odebrat parametry dotazu normalizované na řetězecname=value, který odpovídá regulárnímu výrazuregexp".[options]zde je seznam možností regulárních výrazů. V současné době je jedinou podporovanou možnostíi, díky čemuž se nerozlišují malá a velká písmena.
Uvození speciálních znaků
Speciální znaky by měly být v pravidle URL zakódovány, aby správně odpovídaly textu URL.
Například, pro odstranění ?$param=true byste měli použít pravidlo $removeparam=%24param.
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
Mezery a čárky by měly být také zakódovány v adrese URL, jinak pravidlo nebude odpovídat adrese URL. Nicméně, znaky ., -, _ a ~ by měly být používány tak, jak jsou, protože nejsou označeny jako rezervované znaky v kódování URL.
:::
Nezapomeňte v regulárních výrazech používat uvození speciálních znaků, jako je například .. K tomu použijte znak \. Např. uvozená tečka by měla vypadat takto: \..
Pravidla typu regexp se vztahují na název i hodnotu parametru. Pro minimalizaci chyb je bezpečnější začínat každý regexp znakem /^, pokud se nezaměřujete konkrétně na hodnoty parametrů.
Odebrat všechny parametry dotazu
Chcete-li odebrat všechny parametry dotazu, zadejte samostatně $removeparam:
||example.org^$removeparam— odstraní všechny parametry dotazu z adres URL odpovídajících||example.org^.
Inverze
Pro použití inverze použijte ~:
$removeparam=~param— odstraní všechny parametry dotazu s názvem odlišným odparam.$removeparam=~/regexp/— odstraní všechny parametry dotazu, které neodpovídají regulárnímu výrazuregexp.
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
Pokud se ~ neobjeví na začátku pravidla, považuje se za symbol v textu.
:::
Negace $removeparam
Tento druh pravidel funguje v podstatě stejně jako u modifikátorů $csp a $redirect.
K negaci $removeparam použijte @@:
@@||example.org^$removeparamneguje všechna pravidla$removeparampro URL adresy, které odpovídají||example.org^.@@||example.org^$removeparam=paramneguje všechna pravidla s$removeparam=parampro jakýkoliv požadavek, který odpovídá||example.org^.@@||example.org^$removeparam=/regexp/neguje všechna pravidla s$removeparam=/regexp/pro jakýkoliv požadavek, který odpovídá||example.org^.
Vícenásobná pravidla odpovídajících jednomu požadavku
V případě, že jednomu požadavku odpovídá více pravidel $removeparam, bude každé z nich použito jedno po druhém.
Příklady
$removeparam=/^(utm_source|utm_medium|utm_term)=/
$removeparam=/^(utm_content|utm_campaign|utm_referrer)=/
@@||example.com^$removeparam
S těmito pravidly bude z jakéhokoli požadavku odstraněno UTM parametrů, kromě toho, že požadavky na example.com nebudou odstraněny vůbec, např. https://google.com/page?utm_source=s&utm_referrer= fb.com&utm_content=img bude transformováno na https://google.com/page, ale https://example.com/page?utm_source=s&utm_referrer=fb.com&utm_content=img nebude ovlivněno pravidlem blokování.
-
$removeparam=utm_sourceodstraní parametr dotazuutm_sourceze všech požadavků. -
$removeparam=/utm_.*/odstraní všechny parametryutm_* queryz URL libovolného požadavku, např. požadavek nahttps://example.com/page?utm_source=testbude transformován nahttps://example.com/page. -
$removeparam=/^utm_source=campaign$/odstraní parametr dotazuutm_sources hodnotou rovnoucampaign. Nemá vliv na ostatní parametryutm_source.
Negace pravidla $removeparam a jeho nahrazení jiným pravidlem
$removeparam=/^(gclid|yclid|fbclid)=/
@@||example.com^$removeparam=/^(gclid|yclid|fbclid)=/
||example.com^$removeparam=/^(yclid|fbclid)=/
Díky těmto pravidlům budou ze všech požadavků odstraněny identifikátory kliknutí Google, Yandex a Facebook. Existuje jedna výjimka: Z požadavků na example.com nebude odstraněno Google Click ID (gclid).
Negace pro všechny parametry $removeparam
$removeparam=/^(utm_source|utm_medium|utm_term)=/
$removeparam=/^(utm_content|utm_campaign|utm_referrer)=/
@@||example.com^$removeparam
Díky těmto pravidlům budou zadané parametry UTM odstraněny ze všech požadavků s výjimkou požadavků na example.org.
Pravidla $removeparam lze také zakázat pravidly výjimek $document a $urlblock. Základní pravidla pro výjimky bez modifikátorů to však nedělají. Např. @@||example.com^ nezakáže $removeparam=p pro požadavky na example.com, ale @@||example.com^$urlblock ano.
omezení modifikátoru $removeparam
AdGuard pro Chrome MV3 má některá omezení:
-
Regulární výrazy, negace a pravidla seznamu povolených nejsou podporovány.
-
Každé pravidlo
$removeparams pojmenovaným parametrem má své vlastní deklarativní pravidlo s parametremurlFilter(například^utm_source=). Chrome DNR provede přesměrování pouze jednou za relaci, takže bez této funkce by se uplatnilo pouze pravidlo s nejvyšší prioritou a ostatní by byla přeskočena. Param-awareurlFilterzpůsobí, že se každé pravidlo spustí pouze v případě, že je přítomen jeho cílový parametr a vytvoří řetězec přesměrování — na každý skok je odstraněn jeden parametr — dokud nejsou všechny odstraněny. Chrome umožňuje až 20 přesměrování na jednu navigaci, což je dost pro reálné sledovací URL. Tyto skoky nejsou pro uživatele viditelné. Příklad:||testcases.adguard.com$xmlhttprequest,removeparam=p1case1||testcases.adguard.com$xmlhttprequest,removeparam=p2case1||testcases.adguard.com$xmlhttprequest,removeparam=P3Case1$xmlhttprequest,removeparam=p1case2je převedeno na
[{"id": 1,"action": {"type": "redirect","redirect": {"transform": {"queryTransform": {"removeParams": ["p1case1"]}}}},"condition": {"urlFilter": "||testcases.adguard.com*^p1case1=","resourceTypes": ["xmlhttprequest"]}},{"id": 2,"action": {"type": "redirect","redirect": {"transform": {"queryTransform": {"removeParams": ["p2case1"]}}}},"condition": {"urlFilter": "||testcases.adguard.com*^p2case1=","resourceTypes": ["xmlhttprequest"]}},{"id": 3,"action": {"type": "redirect","redirect": {"transform": {"queryTransform": {"removeParams": ["P3Case1"]}}}},"condition": {"urlFilter": "||testcases.adguard.com*^P3Case1=","resourceTypes": ["xmlhttprequest"]}},{"id": 4,"action": {"type": "redirect","redirect": {"transform": {"queryTransform": {"removeParams": ["p1case2"]}}}},"condition": {"urlFilter": "^p1case2=","resourceTypes": ["xmlhttprequest"]}}]
- Pravidla s modifikátorem
$removeparamlze použít pouze v důvěryhodných filtrech. - Pravidla
$removeparamjsou kompatibilní se základními modifikátory, modifikátory typu obsahu a s modifikátory$importanta$app. Pravidla s jinými modifikátory jsou považována za neplatná a budou vyřazena. - Ačkoli je modifikátor
$domainklasifikován jako základní, není kompatibilní s pravidly$removeparamv rozšíření Manifest V3. - Pravidla
$removeparam, která neobsahují žádné modifikátory typu obsahu, budou odpovídat pouze požadavkům, jejichž typem obsahu jedocument.
- Pravidla s modifikátorem
$removeparamjsou podporována AdGuardem pro Windows, AdGuardem pro macOS, AdGuardem pro Android a AdGuardem pro Linux s CoreLibs v1.7 nebo novější a Rozšířením prohlížeče AdGuard v3.6 nebo novějším. - Syntaxe
$removeparampro regulární výrazy je podporována AdGuardem pro Windows, AdGuardem pro macOS a AdGuardem pro Android s CoreLibs v1.8 nebo novější a Rozšířením prohlížeče AdGuard v4.0 nebo novějším. - Typy požadavků
POSTpodporuje pouze AdGuard pro Windows, Mac a Android s CoreLibs v1.10 nebo novější a rozšíření prohlížeče AdGuard s TSWebExtension v0.4.6 nebo novější.
$replace
Tento modifikátor zcela mění chování pravidla. Pokud je použitý, pravidlo požadavek nezablokuje. Namísto toho bude odpověď upravena.
K použití modifikátoru $replace budete potřebovat určité znalosti regulárních výrazů.
Funkce
- Pravidla
$replaceplatí pro jakoukoli textovou odpověď, ale neplatí pro binární (media,image,objectatd.). - Pravidla
$replaceneplatí, pokud je velikost původní odpovědi větší než 10 MB. - Pravidla
$replacemají vyšší prioritu než ostatní základní pravidla včetně pravidel výjimek. Pokud tedy požadavek odpovídá dvěma různým pravidlům, z nichž jedno má modifikátor$replace, použije se toto pravidlo. - Pravidla výjimek na úrovni dokumentu s modifikátory
$contentnebo$documentzakáží pravidla$replacepro požadavky, které jim odpovídají. - Ostatní pravidla výjimek na úrovni dokumentu (
$generichide,$elemhidenebo modifikátory$jsinject) se uplatňují vedle pravidel$replace. To znamená, že můžete upravit obsah stránky pomocí pravidla$replacea zároveň zde zakázat kosmetická pravidla.
Hodnota $replace může být v případě pravidel pro výjimky prázdná. Další informace naleznete v části Příklady.
Vícenásobná pravidla odpovídajících jednomu požadavku
V případě, že jednomu požadavku odpovídá více pravidel $replace, použijeme každé z nich. Pořadí je stanoveno abecedně.
Syntaxe
Obecně je syntaxe $replace podobná nahrazování regulárními výrazy v Perl.
replace = "/" regexp "/" replacement "/" modifiers
regexp— regulární výraz.replacement— řetězec, který bude použit k nahrazení řetězce odpovídajícíhoregexp.modifiers— příznaky regulárního výrazu. Napříkladi— necitlivé vyhledávání nebos— jednořádkový režim.
V hodnotě $replace musí být dva znaky uvozeny: čárka , a znak dolaru $. Použijte pro to zpětné lomítko \. Např. uvozená čárka vypadá takto: \,.
Příklady
||example.org^$replace=/(<VAST[\s\S]*?>)[\s\S]*<\/VAST>/\$1<\/VAST>/i
Toto pravidlo má tři části:
regexp—(<VAST(.|\s)*?>)(.|\s)*<\/VAST>;replacement—\$1<\/VAST>kde$je uvozeno;modifiers—ipro necitlivé vyhledávání.
Jak toto pravidlo funguje, se můžete podívat zde: https://regexr.com/3cesk
Vícenásobná pravidla $replace
||example.org^$replace=/X/Y/||example.org^$replace=/Z/Y/@@||example.org/page/*$replace=/Z/Y/
- Jak pravidlo 1, tak pravidlo 2 se použijí na všechny požadavky odeslané na
example.org. - Pravidlo 2 je zakázáno pro požadavky odpovídající na
||example.org/page/, ale pravidlo 1 stále funguje!
Zakázání pravidel $replace
@@||example.org^$replacezakáže všechna pravidla$replaceodpovídající na||example.org^.@@||example.org^$documentnebo@@||example.org^$contentzakáže všechna pravidla$replacepocházející ze stránekexample.orgvčetně stránky samotné.
- Pravidla s modifikátorem
$replacelze použít pouze v důvěryhodných filtrech. - Pravidla
$replaceneplatí, pokud je velikost původní odpovědi větší než 10 MB. Pro rozšíření AdGuard platí toto omezení od verze 5.2 nebo novější.
Pravidla s modifikátorem $replace podporuje AdGuard pro Windows, Mac, Android a Rozšíření prohlížeče AdGuard pro Chrome, Firefox a Edge. Taková pravidla v rozšířeních pro jiné prohlížeče nefungují, protože nemohou měnit obsah na úrovni sítě.
$urltransform
Pravidla $urltransform vám umožňují upravit URL požadavku nahrazením textu, který odpovídá regulárnímu výrazu.
Funkce
- Pravidla
$urltransformse obvykle vztahují pouze na části URL týkající se cesty a dotazu, viz níže jedna výjimka. $urltransformnebude použito, pokud je původní URL blokována jinými pravidly.$urltransformse použije před pravidly$removeparam.
Hodnota $urltransform může být pro pravidla výjimek prázdná.
Vícenásobná pravidla odpovídajících jednomu požadavku
Pokud jednomu požadavku odpovídá více pravidel $urltransform, použijeme každé z nich. Pořadí je stanoveno abecedně.
Syntaxe
Hodnota $urltransform je řada jedné nebo více transformací oddělených znakem |. První transformace se aplikuje na vstupní URL. Každá z následujících transformací se aplikuje na výstup předchozí transformace. Výstupem neúspěšné transformace (například pokud selhalo dekódování Base64 nebo pokud substituce nenašla žádné shody) je její vstup, beze změny. Formálně:
urltransform = transforms
transforms = transform | transform "|" transforms
transform = substitute | decode
substitute = "/" regexp "/" replacement "/" modifiers
decode = "b64" | "pct"
substituteje podobné nahrazení pomocí regulárních výrazů v Perl.regexp— regulární výraz.replacement— řetězec, který nahrazuje vše, co odpovídáregexp.$1,$2atd. v náhradním řetězci jsou nahrazeny obsahem odpovídající zachycené skupiny.modifiers— příznaky regulárních výrazů, např.ipro vyhledávání bez rozlišení velkých a malých písmen.
b64— dekóduje řetězec kódovaný v Base64, podporovány jsou jak výchozí abecedy, tak abecedy bezpečné pro URL.pct— dekóduje procenty kódovaný řetězec.
V hodnotě $urltransform musí být dva znaky uvozeny: čárka , a znak dolaru $. K tomu použijte znak zpětného lomítka \. Např. uvozená čárka vypadá takto: \,.
Produkty AdGuard, které používají verzi CoreLibs starší než 1.20, podporují pouze jednu substituční transformaci pro hodnotu modifikátoru $urltransform.
Změna původu
This section only applies to AdGuard for Windows, AdGuard for Mac, AdGuard for Android, and AdGuard for Linux with CoreLibs v1.17 or later, and to AdGuard Browser Extension v5.5 or later.
Jak bylo uvedeno výše, pravidla $urltransform mohou normálně měnit pouze část URL obsahující cestu a dotaz. Pokud však pravidlo regexp začíná řetězcem ^http, pak se prohledává celá adresa URL a pravidlo ji může upravit. Takové pravidlo se neuplatní, pokud transformace adresy URL nelze dosáhnout přesměrováním HTTP (například pokud je metoda požadavku POST).
Příklady
||example.org^$urltransform=/(pref\/).*\/(suf)/\$1\$2/i
Toto pravidlo má tři části:
regexp—(pref\/).*\/(suf);replacement—\$1\$2kde$je uvozeno;modifiers—ipro necitlivé vyhledávání.
Vícenásobná pravidla $urltransform
||example.org^$urltransform=/X/Y/||example.org^$urltransform=/Z/Y/@@||example.org/page/*$urltransform=/Z/Y/
- Jak pravidlo 1, tak pravidlo 2 se použijí na všechny požadavky odeslané na
example.org. - Pravidlo 2 je zakázáno pro požadavky odpovídající na
||example.org/page/, ale pravidlo 1 stále funguje!
Opětovná shoda pravidel po transformaci URL
Po použití všech odpovídajících pravidel $urltransform bude transformovaný požadavek porovnán se všemi ostatními pravidly:
Např. s následujícími pravidly:
||example.com^$urltransform=/firstpath/secondpath/
||example.com/secondpath^
požadavek na https://example.com/firstpath bude zablokován.
Zakázání pravidel $urltransform
@@||example.org^$urltransformzakáže všechna pravidla$urltransformodpovídající na||example.org^.@@||example.org^$urltransform=/Z/Y/zakáže pravidlo s$urltransform=/Z/Y/pro jakýkoliv požadavek, který odpovídá||example.org^.
Pravidla $urltransform lze také zakázat pravidly výjimek $document a $urlblock. Základní pravidla pro výjimky bez modifikátorů to však nedělají. Např. @@||example.com^ nezakáže $urltransform=/X/Y/ pro požadavky na example.com, ale @@||example.com^$urlblock ano.
Příklad pravidla pro čištění partnerských odkazů
Mnoho webových stránek používá sledovací URL ke sledování kliknutí před přesměrováním na skutečný cíl. Tyto URL obsahují marketingové parametry a analytické tokeny, které lze odstranit, aby se zvýšila ochrana osobních údajů.
Níže je uveden příklad, jak získat čistý odkaz na cíl, abyste obešli sledovací webové stránky a přešli přímo na cíl.
V našem příkladu:
- Počáteční URL (se sledováním kliknutí):
https://www.aff.example.com/visit?url=https%3A%2F%2Fwww.somestore.com%2F%26referrer%3Dhttps%3A%2F%2Fwww.aff.example.com%2F%26ref%3Dref-123 - Sledování URL po dekódování speciálních znaků:
https://www.aff.example.com/visit?url=https://www.somestore.com/ - Webové stránky, které chcete navštívit:
https://www.somestore.com
Abychom mohli vyčistit URL, musíme nejprve dekódovat speciální znaky (jako %3A → :, %2F → /, atd.) a získat skutečnou URL z parametrů sledování. K tomu použijeme modifikátor $urltransform. Následující 4 pravidla nahrazují symboly URL jejich skutečnými znaky:
/^https?:\/\/(?:[a-z0-9-]+\.)*?aff\.example\.com\/visit\?url=/$urltransform=/%3A/:/ /^https?:\/\/(?:[a-z0-9-]+\.)*?aff\.example\.com\/visit\?url=/$urltransform=/%2F/\// /^https?:\/\/(?:[a-z0-9-]+\.)*?aff\.example\.com\/visit\?url=/$urltransform=/%3F/?/ /^https?:\/\/(?:[a-z0-9-]+\.)*?aff\.example\.com\/visit\?url=/$urltransform=/%3D/=/ /^https?:\/\/(?:[a-z0-9-]+\.)*?aff\.example\.com\/visit\?url=/$urltransform=/%26/&/
Poté musíme napsat pravidlo, které zablokuje sledovací webovou stránku a přesměruje vás přímo na cílovou adresu (somestore.com):
/^https?:\/\/(?:[a-z0-9-]+\.)*?aff\.example\.com\/visit\?url=/$urltransform=/^https?:\/\/(?:[a-z0-9-]+\.)*?aff\.example\.com.*url=([^&]*).*/\$1/
Sledovací odkazy se nyní automaticky vyčistí a umožní přímou navigaci na cílovou webovou stránku bez sledování.
Pravidla s modifikátorem $urltransform lze použít pouze v důvěryhodných filtrech.
$urltransform is only compatible with $domain, $third-party, $important, $match-case, $badfilter, $to, $method, $popup, $denyallow, and content-type modifiers. Rules using any other modifiers are invalid and discarded.
$urltransform rules without content-type modifiers will only match requests where the content type is document.
Rules with the $urltransform modifier are supported by AdGuard for Windows, AdGuard for Mac, AdGuard for Android, and AdGuard for Linux with CoreLibs v1.15 or later.
$urltransform rules with content-type modifiers are supported starting from CoreLibs v1.19 or later. In earlier versions, content-type modifiers were not allowed with $urltransform.
Rules with the $urltransform modifier and content-type modifiers are also supported by AdGuard Browser Extension v5.5 or later, and by AdGuard for Chrome MV3 v5.5 or later with limitations.
$urltransform modifier limitations
In AdGuard for Chrome MV3, the $urltransform modifier has the following limitations:
- No decode stages — pipeline transforms containing
b64(Base64 decode) orpct(percent-decode) stages are not supported and will be discarded. - No global replacement — only the first match is replaced. The
/g(global) flag is ignored. This is usually not an issue for full-URL transforms anchored with^, but path-only patterns that rely on replacing all occurrences will only replace the first one. - Single redirect per request — when multiple
$urltransformrules match the same request, only the highest-priority one takes effect. In CoreLibs, all matching rules are applied sequentially.
$reason
The $reason modifier allows you to add a custom explanation message that will be displayed on the blocking page when a request is blocked by this rule. This modifier only works with the $document content-type modifier.
Character limitations and escaping requirements:
- Pro text s odůvodněním neexistuje žádné omezení maximální délky
- V textu důvodu jsou povoleny všechny znaky
- Zvláštní znaky (například uvozovky, čárky a zpětné lomítko) musí být správně uvozeny pomocí zpětného lomítka (
\)
Predefined localizable tokens:
Instead of custom text, you can use predefined tokens that will be automatically localized:
malicious— pro škodlivý obsahtracker— pro sledování obsahudisreputable— pro nedůvěryhodný obsah
Příklady
||example.com^$document,reason="Tracker"
||example.com^$document,reason="Malicious site blocked by security filter"
||ads.example.com^$document,reason="This site contains tracking scripts"
||malware.example.com^$document,reason="Site blocked: \"Known malware distributor\""
||tracking.example.com^$document,reason=disreputable
||analytics.example.com^$document,reason=tracker
AdGuard for Windows, AdGuard for Mac, AdGuard for Android, and AdGuard for Linux with CoreLibs v1.20 or later support rules with the $reason modifier. AdGuard Content Blocker does not support these rules.
noop
noop modifier does nothing and can be used solely to increase rules' readability. It consists of a sequence of underscore characters (_) of arbitrary length and can appear in a rule as often as needed.
Příklady
||example.com$_,removeparam=/^ss\\$/,_,image
||example.com$replace=/bad/good/,___,~third-party
Rules with noop modifier are not supported by AdGuard Content Blocker.
$empty (zastaralé)
This modifier is deprecated in favor of the $redirect modifier. Rules with $empty are still supported and being converted into $redirect=nooptext now but the support shall be removed in the future.
Usually, blocked requests look like a server error to browser. If you use $empty modifier, AdGuard will emulate a blank response from the server with200 OK status.
Příklady
||example.org^$emptyvrátí prázdnou odpověď na všechny požadavky naexample.orga všechny subdomény.
Rules with $empty modifier are not supported by AdGuard Content Blocker, AdGuard for iOS, and AdGuard for Safari.
$mp4 (zastaralé)
This modifier is deprecated in favor of the $redirect modifier. Rules with $mp4 are still supported and being converted into $redirect=noopmp4-1s,media now but the support shall be removed in the future.
As a response to blocked request AdGuard returns a short video placeholder.
Příklady
||example.com/videa/$mp4zablokuje všechna stahování videa z||example.com/videa/*a změní odpověď na zástupný videoklip.
Rules with $mp4 modifier are not supported by AdGuard Content Blocker, AdGuard for iOS, and AdGuard for Safari.
Priority pravidel
Each rule has its own priority, which is necessary when several rules match the request and the filtering engine needs to select one of them. Priority is measured by a positive integer.
When two rules with the same priority match the same request, the filter engine implementation determines which one is chosen.
The concept of rule priorities becomes increasingly important in light of Manifest V3, as the existing rules need to be converted to declarativeNetRequest rules.
Výpočet priority
To calculate priority, we've categorized modifiers into different groups. These groups are ranked based on their priority, from lowest to highest. A modifier that significantly narrows the scope of a rule adds more weight to its total priority. Conversely, if a rule applies to a broader range of requests, its priority decreases.
It's worth noting that there are cases where a single-parameter modifier has a higher priority than multi-parameter ones. For instance, in the case of $domain=example.com|example.org, a rule that includes two domains has a slightly broader effective area than a rule with one specified domain, therefore its priority is lower.
The base priority of any rule is 1. If the calculated priority is a floating-point number, it will be rounded up to the smallest integer greater than or equal to the calculated priority.
- Koncept priority byl zaveden ve verzích TSUrlFilter v2.1.0 a CoreLibs v1.13. Dříve neměl AdGuard žádný speciální algoritmus pro výpočet priorit a zpracování kolizí se mohlo lišit v závislosti na produktu a verzi AdGuardu.
- Aplikace AdGuard pro iOS, Safari a Blokátor obsahu AdGuard se spoléhají na implementaci prohlížečů a nemohou dodržovat zde uvedená pravidla.
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
Modifier aliases (1p, 3p, etc.) are not included in these categories, however, they are utilized within the engine to compute the rule priority.
:::
Základní modifikátory, přítomnost každého z nich přidává 1 k prioritě
$apps negovanými aplikacemi za použití~,$denyallow,$domains negovanými doménami pomocí~,$match-case,$methods negovanými metodami pomocí~,$strict-first-party,$strict-third-party,$third-party,$to,- omezené typy obsahu s
~.
When dealing with a negated domain, app, method, or content-type, we add 1 point for the existence of the modifier itself, regardless of the quantity of negated domains or content-types. This is because the rule's scope is already infinitely broad. Put simply, by prohibiting multiple domains, content-types, methods or apps, the scope of the rule becomes only minimally smaller.
Definované modifikátory typu obsahu, definované metody, definovaná záhlaví, $all, $popup, specifické výjimky
All valid content types:
$document,$font,$image,$media,$object,$other,$ping,$script,$stylesheet,$subdocument,$websocket,$xmlhttprequest;
This also includes rules that implicitly add all content types:
$all;
Or rules that implicitly add the modifier $document:
Or some specific exceptions that implicitly add $document,subdocument:
Or allowed methods via $method.
Or rules with $header.
The presence of any content-type modifiers adds (50 + 50 / N), where N is the number of modifiers present, for example: ||example.com^$image,script will add 50 + 50 / 2 = 50 + 25 = 75 to the total weight of the rule.
The $all also belongs to this category, because it implicitly adds all content-type modifiers, e.g., $document,subdocument,image,script,media,<etc> + $popup.
The $popup also belongs to this category, because it implicitly adds the modifier $document. Similarly, specific exceptions add $document,subdocument.
If there is a $method modifier in the rule with allowed methods it adds (50 + 50 / N), where N is the number of methods allowed, for example: ||example.com^$method=GET|POST|PUT will add 50 + 50 / 3 = 50 + 16.6 = 67 to the total weight of the rule.
If there is a $header modifier in the rule, it adds 50.
$domain nebo $app s povolenými doménami nebo aplikacemi
Specified domains through $domain or specified applications through $app add 100 + 100 / N, where N is the number of modifier values for example: ||example.com^$domain=example.com|example.org|example.net will add 100 + 100 / 3 = 134.3 = 135 or ||example.com^$app=org.example.app1|org.example.app2 will add 100 + 100 / 2 = 151 or ||example.com^$domain=example.com,app=org.example.app1|org.example.app2 will add 100 + 100/1 ($domain part) and 100 + 100/2 ($app part), totaling 350.
Modifier values that are regexps or tld will be interpreted as normal entries of the form example.com and counted one by one, for example: ||example.com^$domain=example.* will add 100 + 100 / 1 = 200 or ||example.com^$domain=example.*|adguard.* will add 100 + 100 / 2 = 150.
Pravidla $redirect
Each of which adds 10^3 to rule priority.
Specifické výjimky
Each of which adds 10^4 to the priority.
As well as exception with $document modifier: because it's an alias for $elemhide,content,jsinject,urlblock,extension. It will add 10^4 for each modifier from the top list, 10^4 * 5 in total.
In addition, each of these exceptions implicitly adds the two allowed content-type modifiers $document,subdocument.
Pravidla seznamu povolených
Modifier @@ adds 10^5 to rule priority.
Pravidla $important
Modifier $important adds 10^6 to rule priority.
Pravidla, pro která není stanovena váha priority
Other modifiers, which are supposed to perform additional post- or pre-processing of requests, do not add anything to the rule priority.
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
The $replace modifier takes precedence over all blocking rules of categories 1–3, as well as exception rules from categories 3–5, except $content, because an exception with the $content modifier overrides all $replace rules.
:::
Příklady
-
||example.com^Weight of the rule without modifiers:
1. -
||example.com^$match-caseRule weight: base weight + weight of the modifier from category 1:
1 + 1 = 2. -
||example.org^$removeparam=pRule weight: base weight + 0, since $removeparam is not involved in the priority calculation:
1 + 0 = 1. -
||example.org^$document,redirect=nooptextRule weight: base weight + allowed content type, category 3 + $redirect from category 6:
1 + (100 + 100 / 1) + 1000 = 1201. -
@@||example.org^$removeparam=p,documentRule weight: base weight + allowlist rule, category 5 + 0 because $removeparam is not involved in the priority calculation + allowed content type, category 2:
1 + 10000 + 0 + (50 + 50 / 1) = 10101. -
@@||example.com/ad/*$domain=example.org|example.net,importantRule weight: base weight + allowlist rule, category 5 + important rule, category 7 + allowed domains, category 3:
1 + 10000 + 1000000 + (100 + 100 / 2) = 1010152. -
@@||example.org^$documentwithout additional modifiers is an alias for@@||example.com^$elemhide,content,jsinject,urlblock,extensionRule weight: base weight + specific exceptions, category 4 + two allowed content types (document and subdocument), category 2:
1 + 10000 * 4 + (50 + 50 / 2) = 40076. -
*$script,domain=a.com,denyallow=x.com|y.comRule weight: base weight + allowed content type, category 2 + allowed domain, category 3 + denyallow, category 1:
1 + (50 + 50/1) + (100 + 100 / 1) + 1 = 303. -
||example.com^$all— alias to||example.com^$document,subdocument,image,script,media,etc. + $popupRule weight: base weight + popup (category 1) + allowed content types (category 2):
1 + 1 + (50 + 50/12) = 55.
Ostatní pravidla
However, basic rules may not be enough to block ads. Sometimes you need to hide an element or change part of the HTML code of a web page without breaking anything. The rules described in this section are created specifically for this purpose.
| Kategorie \ Produkty | Aplikace CoreLibs | AdGuard pro Chromium | AdGuard pro Chrome MV3 | AdGuard pro Firefox | AdGuard pro iOS | AdGuard pro Safari | Blokátor obsahu AdGuard |
|---|---|---|---|---|---|---|---|
| Skrytí prvků | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Pravidla CSS | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Rozšířené CSS | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| HTML filtrování | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
| JavaScript | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Scriptlety | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
- ✅ — plně podporováno
- ❌ — nepodporováno
:::
Kosmetická pravidla
Work with non-basic rules requires the basic knowledge of HTML and CSS. So, if you want to learn how to make such rules, we recommend to get acquainted with this documentation.
Pravidla pro skrytí prvků
Element hiding rules are used to hide the elements of web pages. It is similar to applying { display: none; } style to selected element.
Element hiding rules may operate differently depending on the platform.
Syntaxe
rule = [domains] "##" selector
domains = [domain0, domain1[, ...[, domainN]]]
selektor— CSS selektor definuje prvky, které mají být skryty.domains— omezení domény pro dané pravidlo.
If you want to limit the rule application area to certain domains, just enter them separated with commas. For example: example.org,example.com##selector.
This rule will be also applied to all subdomains of example.org and example.com.
Pokud chcete, aby se pravidlo nevztahovalo na určité domény, začněte název domény znakem ~. For example: ~example.org##selector.
You can use both approaches in a single rule. For example, example.org,~subdomain.example.org##domain will work for example.org and all subdomains, except subdomain.example.org.
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
Element hiding rules are not dependent on each other. If there is a rule example.org##selector in the filter and you add ~example.org##selector both rules will be applied independently.
:::
Příklady
example.com##div.textad— skryjedivs třídoutextadna doméněexample.coma všech subdoménách.example.com,example.org###adblock— skryje prvek s atributemid, který se rovnáadblocknaexample.com,example.orga všech subdoménách.~example.com##.textad— skryje prvek s třídoutextadna všech doménách kroměexample.coma jejích subdomén.
Omezení
Safari does not support both allowed and disallowed domains. So the rules like example.org,~foo.example.org##.textad are invalid in AdGuard for Safari.
Výjimky
Exceptions can disable some rules on particular domains. They are very similar to usual exception rules, but instead of ## you have to use #@#.
For example, there is a rule in filter:
##.textad
If you want to disable it for example.com, you can create an exception rule:
example.com#@#.textad
Sometimes, it may be necessary to disable all restriction rules. For example, to conduct tests. To do this, use the exclusion rule without specifying a domain. It will completely disable matching CSS elemhide rule on ALL domains:
#@#.textad
The same can be achieved by adding this rule:
*#@#.textad
We recommend to use this kind of exceptions only if it is not possible to change the hiding rule itself. In other cases it is better to change the original rule, using domain restrictions.
Pravidla CSS
Sometimes, simple hiding of an element is not enough to deal with advertising. For example, blocking an advertising element can just break the page layout. In this case AdGuard can use rules that are much more flexible than hiding rules. With these rules you can basically add any CSS styles to the page.
Syntaxe
rule = [domains] "#$#" selector "{" style "}"
domains = [domain0, domain1[, ...[, domainN]]]
selektor— CSS selektor definuje prvky, na které chceme styl použít.domains— omezení domény pro dané pravidlo. Stejné zásady jako v pravidlech pro skrývání prvků.style— styl CSS, který chceme použít na vybrané prvky.
Příklady
example.com#$#body { background-color: #333!important; }
This rule will apply a style background-color: #333!important; to the body element at example.com and all subdomains.
Výjimky
Just like with element hiding, there is a type of rules that disable the selected CSS style rule for particular domains. Exception rule syntax is almost the same, you just have to change #$# to #@$#.
For example, there is a rule in filter:
#$#.textad { visibility: hidden; }
If you want to disable it for example.com, you can create an exception rule:
example.com#@$#.textad { visibility: hidden; }
We recommend to use this kind of exceptions only if it is not possible to change the CSS rule itself. In other cases it is better to change the original rule, using domain restrictions.
Styles that lead to loading any resource are forbidden. Basically, it means that you cannot use any <url> type of value in the style.
CSS rules are not supported by AdGuard Content Blocker.
CSS rules may operate differently depending on the platform.
In AdGuard products that use CoreLibs version 1.18 or later, you can also use element hiding rules to inject a remove: true declaration:
example.org##body { remove: true; }
This usage is discouraged in favor of using CSS rules and is only supported for compatibility with filter lists written for Adblock Plus.
Element hiding exceptions (#@#) are matched by the selector part only, ignoring the declarations block part. For example, the above rule can be disabled by any of the following exception rules:
example.org#@#body
example.org#@#body { remove: true; }
example.org#@#body{remove:true;}
Rozšířené CSS selektory
- Omezení
- Pseudo-třída
:has() - Pseudo-třída
:contains() - Pseudo-třída
:matches-css() - Pseudo-třída
:matches-attr() - Pseudo-třída
:matches-property() - Pseudo-třída
:xpath() - Pseudo-třída
:nth-ancestor() - Pseudo-třída
:upward() - Pseudo-třída
:remove()a pseudo-vlastnostremove - Pseudo-třída
:is() - Pseudo-třída
:not() - Pseudo-class
:empty-trimmed - Pseudo-class
:if-not()(removed)
CSS 3.0 is not always enough to block ads. To solve this problem AdGuard extends CSS capabilities by adding support for the new pseudo-elements. We have developed a separate open-source library for non-standard element selecting and applying CSS styles with extended properties.
The idea of extended capabilities is an opportunity to match DOM elements with selectors based on their own representation (style, text content, etc.) or relations with other elements. There is also an opportunity to apply styles with non-standard CSS properties.
Application area
Extended selectors can be used in any cosmetic rule, whether they are element hiding rules or CSS rules.
Rules with extended CSS selectors are not supported by AdGuard Content Blocker.
Syntaxe
Regardless of the CSS pseudo-classes you are using in the rule, you can use special markers to force applying these rules by ExtendedCss. It is recommended to use these markers for all extended CSS cosmetic rules so that it was easier to find them.
The syntax for extended CSS rules:
#?#— pro skrytí prvku,#@?#— pro výjimky#$?#— pro pravidlo CSS,#@$?#— pro výjimky
We strongly recommend using these markers any time when you use an extended CSS selector.
Příklady
example.org#?#div:has(> a[target="_blank"][rel="nofollow"])— toto pravidlo blokuje všechny prvkydivobsahující podřízený uzel, který má odkaz s atributy[target="_blank"][rel="nofollow"]. Pravidlo platí pouze proexample.orga její subdomény.example.com#$?#h3:contains(cookies) { display: none!important; }— toto pravidlo nastaví styldisplay: none!importantvšem prvkůmh3, které obsahují slovocookies. Pravidlo platí pouze proexample.coma všechny její subdomény.example.net#?#.banner:matches-css(width: 360px)— toto pravidlo blokuje všechny prvky.banners vlastností styluwidth: 360px. Pravidlo platí pouze proexample.neta její subdomény.example.net#@?#.banner:matches-css(width: 360px)— toto pravidlo zakáže předchozí pravidlo.
You can apply standard CSS selectors using the ExtendedCss library by using the rule marker #?#, e.g. #?#div.banner.
Learn more about how to debug extended selectors.
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
Some pseudo-classes do not require selector before it. Still adding the universal selector * makes an extended selector easier to read, even though it has no effect on the matching behavior. So selector #block :has(> .inner) works exactly like #block *:has(> .inner), but the second one is more obvious.
Pseudo-class names are case-insensitive, e.g. :HAS() works as :has(). Still the lower-case names are used commonly.
:::
Limitace ExtendedCss
-
Specific pseudo-class may have its own limitations:
:has(),:xpath(),:nth-ancestor(),:upward(),:is(),:not(), and:remove().
Pseudo-třída :has()
Draft CSS 4.0 specification describes the :has() pseudo-class. Unfortunately, it is not yet supported by all popular browsers.
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
Rules with the :has() pseudo-class must use the native implementation of :has() if they use the ## rule marker and if it is possible, i.e., there are no other extended CSS selectors inside. If it is not supported by the product (or by the browser in case of AdGuard Browser Extension), ExtendedCss implementation will be used automatically as a fallback, even for rules with the ## marker.
AdGuard products support the native implementation of :has():
- AdGuard pro Windows, AdGuard pro Mac, AdGuard pro Android a AdGuard pro Linux to podporují s knihovnou CoreLibs v1.12 nebo novější.
- AdGuard pro iOS a AdGuard pro Safari to podporují s knihovnou SafariConverterLib v2.0.39 a prohlížečem Safari v16.4 nebo novějším.
- Rozšíření prohlížeče AdGuard to podporuje ve verzi 5.3 nebo novější:
- Manifest V3 (na bázi Chromium): vždy používá nativní
:has()jako výchozí. - Manifest V2: Pokud prohlížeč nepodporuje nativní podporu
:has(), použijeCSS.supports()a vrátí se k ExtendedCss.
- Manifest V3 (na bázi Chromium): vždy používá nativní
- Všechny ostatní produkty AdGuardu to nepodporují.
To force the ExtendedCss implementation of :has() to be used (regardless of native support), use the #?# or #$?# rule markers explicitly, e.g., example.com#?#p:has(> a) or example.com#$?#div:has(> span) { display: none !important; }.
And since the :has() pseudo-class cannot be nested within another :has() in native implementation, e.g. div:has(p:has(a)), it is always treated as extended in AdGuard Browser Extension.
:::
Compatibility with other pseudo-classes
Synonyms :-abp-has() is supported by ExtendedCss for better compatibility.
:if() is no longer supported as a synonym for :has().
Syntaxe
[target]:has(selector)
target— nepovinný, standardní nebo rozšířený selektor CSS může být přeskočen pro kontrolu libovolného prvkuselector— povinný, standardní nebo rozšířený selektor CSS
The pseudo-class :has() selects the target elements that fit to the selector. Also the selector can start with a combinator.
A selector list can be set in selector as well. In this case all selectors in the list are being matched for now. In the future it will be fixed for <forgiving-relative-selector-list> as argument.
:has() limitations
Usage of the :has() pseudo-class is restricted for some cases (2, 3):
- zakazuje
:has()uvnitř pseudo akceptující pouze složené selektory; - zakazuje
:has()po běžných pseudoprvcích.
Native :has() pseudo-class does not allow :has(), :is(), :where() inside :has() argument to avoid increasing the :has() invalidation complexity (case 1). But ExtendedCss did not have such limitation earlier and filter lists already contain such rules, so we have not added this limitation to ExtendedCss and allow to use :has() inside :has() as it was possible before. To use it, just force ExtendedCss usage by setting #?#/#$?# rule marker.
Native implementation does not allow any usage of :scope inside the :has() argument ([1], [2]). Still, there are some such rules in filter lists: div:has(:scope a) which we continue to support by simply converting them to div:has(> a), as it used to be done previously.
Příklady
div:has(.banner) selects all div elements which include an element with the banner class:
<!-- HTML code -->
<div>Not selected</div>
<div>Selected
<span class="banner">inner element</span>
</div>
div:has(> .banner) selects all div elements which include an banner class element as a direct child of div:
<!-- HTML code -->
<div>Not selected</div>
<div>Selected
<p class="banner">child element</p>
</div>
div:has(+ .banner) selects all div elements preceding banner class element which immediately follows the div and both are children of the same parent:
<!-- HTML code -->
<div>Not selected</div>
<div>Selected</div>
<p class="banner">adjacent sibling</p>
<span>Not selected</span>
div:has(~ .banner) selects all div elements preceding banner class element which follows the div but not necessarily immediately and both are children of the same parent:
<!-- HTML code -->
<div>Not selected</div>
<div>Selected</div>
<span>Not selected</span>
<p class="banner">general sibling</p>
div:has(span, .banner) selects all div elements which include both span element and banner class element:
<!-- HTML code -->
<div>Not selected</div>
<div>Selected
<span>child span</span>
<p class="banner">child .banner</p>
</div>
Backward compatible syntax for :has() is supported but not recommended.
Pseudo-třída :contains()
The :contains() pseudo-class principle is very simple: it allows to select the elements that contain specified text or which content matches a specified regular expression. Regexp flags are supported.
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
The :contains() pseudo-class uses the textContent element property for matching, not the innerHTML.
:::
Compatibility with other pseudo-classes
Synonyms :-abp-contains() and :has-text() are supported for better compatibility.
Syntaxe
[target]:contains(match)
target— nepovinný, standardní nebo rozšířený selektor CSS může být přeskočen pro kontrolu libovolného prvkushoda— povinný, řetězec nebo regulární výraz pro shodu prvkutextContent. Příznaky regulárních výrazů jsou podporovány.
Příklady
For such DOM:
<!-- HTML code -->
<div>Not selected</div>
<div id="match">Selected as IT contains "banner"</div>
<div>Not selected <div class="banner"></div></div>
the element div#match can be selected by any of these extended selectors:
! prostý text
div:contains(banner)
! regulární výraz
div:contains(/as .*banner/)
! regulární výraz s příznaky
div:contains(/it .*banner/gi)
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
Only the div with id=match is selected because the next element does not contain any text, and banner is a part of code, not a text.
:::
Backward compatible syntax for :contains() is supported but not recommended.
Pseudo-třída :matches-css()
The :matches-css() pseudo-class allows to match the element by its current style properties. The work of the pseudo-class is based on using the Window.getComputedStyle() method.
Syntaxe
[target]:matches-css([pseudo-element, ] property: pattern)
target— nepovinný, standardní nebo rozšířený selektor CSS může být přeskočen pro kontrolu libovolného prvkupseudo-element— volitelný, platný standardní pseudoprvek, např.before,after,first-lineatd.property— povinný, název vlastnosti CSS, pro kterou se má prvek zkontrolovatpattern— povinný, vzor hodnoty, který používá stejnou jednoduchou shodu se zástupnými znaky jako v základních pravidlech filtrování adres URL nebo regulární výraz. Při tomto typu porovnávání, AdGuard vždy porovnává bez ohledu na velikost písmen. V případě regulárního výrazu vypadá vzor takto:/regexp/.
Special characters escaping and unescaping
For non-regexp patterns (,),[,] must be unescaped, e.g. :matches-css(background-image:url(data:*)).
For regexp patterns \ should be escaped, e.g. :matches-css(background-image: /^url\\("data:image\\/gif;base64.+/).
Příklady
For such DOM:
<!-- HTML code -->
<style type="text/css">
#matched::before {
content: "Block me"
}
</style>
<div id="matched"></div>
<div id="not-matched"></div>
the div elements with pseudo-element ::before and with specified content property can be selected by any of these extended selectors:
! string pattern
div:matches-css(before, content: block me)
! string pattern with wildcard
div:matches-css(before, content: block*)
! regular expression pattern
div:matches-css(before, content: /block me/)
Regexp patterns do not support flags.
Obsolete pseudo-classes :matches-css-before() and :matches-css-after() are no longer recommended but still are supported for better compatibility.
Backward compatible syntax for :matches-css() is supported but not recommended.
Pseudo-třída :matches-attr()
The :matches-attr() pseudo-class allows selecting an element by its attributes, especially if they are randomized.
Syntaxe
[target]:matches-attr("name"[="value"])
target— nepovinný, standardní nebo rozšířený selektor CSS může být přeskočen pro kontrolu libovolného prvkuname— povinný, jednoduchý řetězec nebo řetězec se zástupným znakem nebo regulární výraz pro shodu názvu atributuvalue— volitelný, jednoduchý řetězec nebo řetězec se zástupným znakem nebo regulární výraz pro shodu hodnoty atributu
Uvození speciálních znaků
For regexp patterns " and \ should be escaped, e.g. div:matches-attr(class=/[\\w]{5}/).
Příklady
div:matches-attr("ad-link") selects the element div#target1:
<!-- HTML code -->
<div id="target1" ad-link="1random23-banner_240x400"></div>
div:matches-attr("data-*"="adBanner") selects the element div#target2:
<!-- HTML code -->
<div id="target2" data-1random23="adBanner"></div>
div:matches-attr(*unit*=/^click$/) selects the element div#target3:
<!-- HTML code -->
<div id="target3" random123-unit094="click"></div>
*:matches-attr("/.{5,}delay$/"="/^[0-9]*$/") selects the element #target4:
<!-- HTML code -->
<div>
<inner-random23 id="target4" nt4f5be90delay="1000"></inner-random23>
</div>
Regexp patterns do not support flags.
Pseudo-třída :matches-property()
The :matches-property() pseudo-class allows selecting an element by matching its properties.
Syntaxe
[target]:matches-property("name"[="value"])
target— nepovinný, standardní nebo rozšířený selektor CSS může být přeskočen pro kontrolu libovolného prvkuname— povinný, jednoduchý řetězec nebo řetězec se zástupným znakem nebo regulární výraz pro porovnávání názvů vlastností prvkůvalue— volitelný, jednoduchý řetězec nebo řetězec se zástupným znakem nebo regulární výraz pro porovnávání názvů vlastností prvků
Uvození speciálních znaků
For regexp patterns " and \ must be escaped, e.g. div:matches-property(prop=/[\\w]{4}/).
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
Regexp patterns are supported in name for any property in chain, e.g. prop./^unit[\\d]{4}$/.type.
:::
Příklady
An element with such properties:
divProperties = {
id: 1,
check: {
track: true,
unit_2random1: true,
},
memoizedProps: {
key: null,
tag: 12,
_owner: {
effectTag: 1,
src: 'ad.com',
},
},
};
can be selected by any of these extended selectors:
div:matches-property(check.track)
div:matches-property("check./^unit_.{4,8}$/")
div:matches-property("check.unit_*"=true)
div:matches-property(memoizedProps.key="null")
div:matches-property(memoizedProps._owner.src=/ad/)
To check properties of a specific element, do the following:
- Inspect the page element or select it in
Elementstab of browser DevTools - Run
console.dir($0)inConsoletab
Regexp patterns do not support flags.
Pseudo-třída :xpath()
The :xpath() pseudo-class allows selecting an element by evaluating an XPath expression.
Syntaxe
[target]:xpath(expression)
target— volitelný, standardní nebo rozšířený selektor CSSexpression— povinný, platný výraz XPath
:xpath() limitations
target can be omitted so it is optional. For any other pseudo-class that would mean "apply to all DOM nodes", but in case of :xpath() it just means "apply to the whole document", and such applying slows elements selecting significantly. That's why rules like #?#:xpath(expression) are limited to looking inside the body tag. For example, rule #?#:xpath(//div[@data-st-area=\'Advert\']) is parsed as #?#body:xpath(//div[@data-st-area=\'Advert\']).
Extended selectors with defined target as any selector — *:xpath(expression) — can still be used but it is not recommended, so target should be specified instead.
Works properly only at the end of selector, except for pseudo-class :remove().
Příklady
:xpath(//*[@class="banner"]) selects the element div#target1:
<!-- HTML code -->
<div id="target1" class="banner"></div>
:xpath(//*[@class="inner"]/..) selects the element div#target2:
<!-- HTML code -->
<div id="target2">
<div class="inner"></div>
</div>
Pseudo-třída :nth-ancestor()
The :nth-ancestor() pseudo-class allows to lookup the nth ancestor relative to the previously selected element.
subject:nth-ancestor(n)
subjectr— povinný, standardní nebo rozšířený selektor CSSn— povinné, číslo >= 1 a < 256, vzdálenost k potřebnému předkovi od prvku vybraného pomocísubject
Syntaxe
subject:nth-ancestor(n)
subjectr— povinný, standardní nebo rozšířený selektor CSSn— povinné, číslo >= 1 a < 256, vzdálenost k potřebnému předkovi od prvku vybraného pomocísubject
:nth-ancestor() limitations
The :nth-ancestor() pseudo-class is not supported inside the argument of the :not() pseudo-class.
Příklady
For such DOM:
<!-- HTML code -->
<div id="target1">
<div class="child"></div>
<div id="target2">
<div>
<div>
<div class="inner"></div>
</div>
</div>
</div>
</div>
.child:nth-ancestor(1) selects the element div#target1, div[class="inner"]:nth-ancestor(3) selects the element div#target2.
Pseudo-třída :upward()
The :upward() pseudo-class allows to lookup the ancestor relative to the previously selected element.
Syntaxe
subject:upward(ancestor)
subjectr— povinný, standardní nebo rozšířený selektor CSSancestor— povinný, specifikace pro předka prvku vybraného pomocísubject, lze nastavit jako:- číslo >= 1 a < 256 pro vzdálenost k požadovanému předkovi, stejně jako u položky
:nth-ancestor() - standardní selektor CSS pro shodu nejbližšího předka
- číslo >= 1 a < 256 pro vzdálenost k požadovanému předkovi, stejně jako u položky
:upward() limitations
The :upward() pseudo-class is not supported inside the argument of the :not() pseudo-class.
Příklady
For such DOM:
<!-- HTML code -->
<div id="target1" data="true">
<div class="child"></div>
<div id="target2">
<div>
<div>
<div class="inner"></div>
</div>
</div>
</div>
</div>
.inner:upward(div[data]) selects the element div#target1, .inner:upward(div[id]) selects the element div#target2, .child:upward(1) selects the element div#target1, .inner:upward(3) selects the element div#target2.
Pseudo-třída :remove() a pseudo-vlastnost remove
Sometimes, it is necessary to remove a matching element instead of hiding it or applying custom styles. In order to do it, you can use the :remove() pseudo-class as well as the remove pseudo-property.
Pseudo-class :remove() can be placed only at the end of a selector.
Syntaxe
! pseudo-class
selector:remove()
! pseudo-property
selector { remove: true; }
selector— povinný, standardní nebo rozšířený selektor CSS
:remove() and remove limitations
The :remove() pseudo-class is limited to work properly only at the end of selector.
For applying the :remove() pseudo-class to any element, the universal selector * should be used. Otherwise such extended selector may be considered as invalid, e.g. .banner > :remove() is not valid for removing any child element of banner class element, so it should look like .banner > *:remove().
If the :remove() pseudo-class or the remove pseudo-property is used, all style properties are ignored except for the debug pseudo-property.
Příklady
div.banner:remove()
div:has(> div[ad-attr]):remove()
div:contains(advertisement) { remove: true; }
div[class]:has(> a > img) { remove: true; }
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
Rules with the remove pseudo-property must use #$?# marker: $ for CSS-style rule syntax, ? for ExtendedCss syntax.
:::
Pseudo-třída :is()
The :is() pseudo-class allows to match any element that can be selected by any of selectors passed to it. Invalid selectors are skipped and the pseudo-class deals with valid ones with no error thrown. Our implementation of the native :is() pseudo-class.
Syntaxe
[target]:is(selectors)
target— nepovinný, standardní nebo rozšířený selektor CSS může být přeskočen pro kontrolu libovolného prvkuselektory— šetrný seznam standardních nebo rozšířených selektorů. U rozšířených selektorů jsou podporovány pouze složené selektory, nikoli komplexní.
:is() limitations
Rules with the :is() pseudo-class must use the native implementation of :is() if rules use ## marker and it is possible, i.e. with no other extended selectors inside. To force applying ExtendedCss rules with :is(), use #?#/#$?# marker explicitly.
If the :is() pseudo-class argument selectors is an extended selector, due to the way how the :is() pseudo-class is implemented in ExtendedCss v2.0, it is impossible to apply it to the top DOM node which is html, i.e. #?#html:is(<extended-selectors>) does not work. So if target is not defined or defined as the universal selector *, the extended pseudo-class applying is limited to html's children, e.g. rules #?#:is(...) and #?#*:is(...) are parsed as #?#html *:is(...). Please note that there is no such limitation for a standard selector argument, i.e. #?#html:is(.locked) works fine.
Complex selectors with extended pseudo-classes are not supported as selectors argument for :is() pseudo-class, only compound ones are allowed. Check examples below for more details.
Příklady
#container *:is(.inner, .footer) selects only the element div#target1:
<!-- HTML code -->
<div id="container">
<div data="true">
<div>
<div id="target1" class="inner"></div>
</div>
</div>
</div>
Due to limitations :is(*:not([class]) > .banner)' does not work but :is(*:not([class]):has(> .banner)) can be used instead of it to select the element div#target2:
<!-- HTML code -->
<span class="span">text</span>
<div id="target2">
<p class="banner">inner paragraph</p>
</div>
Pseudo-třída :not()
The :not() pseudo-class allows to select elements which are not matched by selectors passed as argument. Invalid argument selectors are not allowed and error is to be thrown. Our implementation of the :not() pseudo-class.
Syntaxe
[target]:not(selectors)
target— nepovinný, standardní nebo rozšířený selektor CSS může být přeskočen pro kontrolu libovolného prvkuselectors— seznam standardních nebo rozšířených selektorů
:not() limitations
Rules with the :not() pseudo-class must use the native implementation of :not() if rules use ## marker and it is possible, i.e. with no other extended selectors inside. To force applying ExtendedCss rules with :not(), use #?#/#$?# marker explicitly.
If the :not() pseudo-class argument selectors is an extended selector, due to the way how the :not() pseudo-class is implemented in ExtendedCss v2.0, it is impossible to apply it to the top DOM node which is html, i.e. #?#html:not(<extended-selectors>) does not work. So if target is not defined or defined as the universal selector *, the extended pseudo-class applying is limited to html's children, e.g. rules #?#:not(...) and #?#*:not(...) are parsed as #?#html *:not(...). Please note that there is no such limitation for a standard selector argument, i.e. #?#html:not(.locked) works fine.
The :not() is considered as a standard CSS pseudo-class inside the argument of the :upward() pseudo-class because :upward() supports only standard selectors.
"Up-looking" pseudo-classes which are :nth-ancestor() and :upward() are not supported inside selectors argument for :not() pseudo-class.
Příklady
#container > *:not(h2, .text) selects only the element div#target1:
<!-- HTML code -->
<div id="container">
<h2>Header</h2>
<div id="target1"></div>
<span class="text">text</span>
</div>
Pseudo-class :empty-trimmed
The :empty-trimmed pseudo-class allows selecting elements without text content. Unlike the native CSS :empty pseudo-class, which matches elements that have no child nodes at all (no elements, no text nodes), :empty-trimmed checks textContent of the element and its descendants. It also matches elements whose text content consists only of whitespace, including non-breaking spaces such as .
Syntaxe
[target]:empty-trimmed
target— nepovinný, standardní nebo rozšířený selektor CSS může být přeskočen pro kontrolu libovolného prvku
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
This pseudo-class has no arguments.
:::
Added in ExtendedCSS v2.0.0.
Rules with the :empty-trimmed pseudo-class are supported by AdGuard Browser Extension v5.5 or later. Such rules do not work in AdGuard Content Blocker.
Příklady
div > p:empty-trimmed selects p#empty, p#spaces, p#nbsp, p#child-empty, and p#comment:
<!-- HTML code -->
<div>
<p id="empty"></p>
<p id="spaces"> </p>
<p id="nbsp"> </p>
<p id="text">hello</p>
<p id="child-empty"><span></span></p>
<p id="child-text"><span>world</span></p>
<p id="comment"><!-- hidden --></p>
<p id="zwsp">​</p>
</div>
div > p:not(:empty-trimmed) selects p#text, p#child-text, and p#zwsp.
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
An element like <p><span></span></p> matches :empty-trimmed (its text content is empty) but does not match native :empty (it has a child <span> node).
Elements containing only HTML comments (e.g. <!-- hidden -->) also match :empty-trimmed, because comment nodes are not reflected in textContent.
Zero-width characters such as zero-width space (\u200B) are not treated as whitespace. An element containing only zero-width characters does not match :empty-trimmed.
:::
Pseudo-class :if-not() (removed)
The :if-not() pseudo-class is removed and is no longer supported. Pravidla s tímto modifikátorem jsou považována za neplatná.
This pseudo-class was basically a shortcut for :not(:has()). It was supported by ExtendedCss for better compatibility with some filters subscriptions.
Přednost kosmetických pravidel
The way element hiding and CSS rules are applied is platform-specific.
In AdGuard for Windows, AdGuard for Mac, AdGuard for Android, and AdGuard for Linux, we use a stylesheet injected into the page. The priority of cosmetic rules is the same as any other websites' CSS stylesheet. But there is a limitation: element hiding and CSS rules cannot override inline styles. In such cases, it is recommended to use extended selectors or HTML filtering.
In AdGuard Browser Extension, the so-called "user stylesheets" are used. They have higher priority than even the inline styles.
Extended CSS selectors use JavaScript to work and basically add an inline style themselves, therefore they can override any style.
HTML pravidla filtrování
In most cases, the basis and cosmetic rules are enough to filter ads. But sometimes it is necessary to change the HTML-code of the page itself before it is loaded. This is when you need filtering rules for HTML content. They allow to indicate the HTML elements to be cut out before the browser loads the page.
HTML filtering rules are supported by AdGuard for Windows, AdGuard for Mac, AdGuard for Android, AdGuard for Linux, and AdGuard Browser Extension for Firefox. Such rules do not work in extensions for other browsers because they are unable to modify content on network level.
The syntax with an optional value in the attributes is supported by AdGuard for Windows, AdGuard for Mac, and AdGuard for Android with CoreLibs v1.18 or later. It is also supported by AdGuard Browser Extension v5.2 or later. For the other products and previous versions value must always be specified. Otherwise, the rule will be treated as incorrect and ignored.
Syntaxe
Syntax supported by AdGuard for Windows, AdGuard for Mac, AdGuard for Android, AdGuard for Linux with CoreLibs, and AdGuard Browser Extension prior to v5.2:
selector = [tagName] [attributes] [pseudoClasses]
combinator = ">"
rule = [domains] "$$" selector *(combinator selector)
domains = [domain0, domain1[, ...[, domainN]]]
attributes = "[" name0[ = value0] "]" "[" name1[ = value2] "]" ... "[" nameN[ = valueN] "]"
pseudoClasses = pseudoClass *pseudoClass
pseudoClass = ":" pseudoName [ "(" pseudoArgs ")" ]
tagName— name of the element in lower case, for example,divorscript.domains— omezení domény pro dané pravidlo. Same principles as in element hiding rule syntax.attributes— a list of attributes that limit the selection of elements.name— required, attribute name;value— optional (may not be specified), substring that is contained in attribute value.pseudoName— the name of a pseudo-class.pseudoArgs— the arguments of a function-style pseudo-class.combinator— an operator that works similarly to the CSS child combinator: that is, theselectoron the right of thecombinatorwill only match an element whose direct parent matches theselectoron the left of thecombinator.
Syntax supported by AdGuard Browser Extension v5.3 or later:
rule = [domains] "$$" selector
domains = [domain0, domain1[, ...[, domainN]]]
selector— CSS selector, defines the element(s) to be removed from the HTML code before the page is loaded.domains— omezení domény pro dané pravidlo. Same principles as in element hiding rule syntax.
The following limitations apply to AdGuard Browser Extension v5.3 and later:
- Pseudo-elements (e.g.,
::before,::after) are not supported, as they are not applicable in the context of HTML filtering.
Příklady
HTML code:
<script data-src="/banner.js"></script>
Rule:
example.org$$script[data-src="banner"]
This rule removes all script elements with the attribute data-src containing the substring banner. The rule applies only to example.org and all its subdomains.
If the value of the attribute is omitted in the rule, then the element will be removed if it contains the specified attribute, regardless of its value. This is also the way to remove the elements whose attributes don't have any value at all.
<div some_attribute="some_value"></div>
<div some_attribute></div>
example.org$$div[some_attribute]
This rule removes all div elements with the attribute some_attribute on example.org and all its subdomains. So, the both div elements from the example above will be removed.
Speciální atributy
In addition to checking standard HTML attributes, you can filter elements based on their inner text or script content.
:contains()
The recommended way to filter elements by their content is using the :contains() pseudo-class. It allows you to target elements based on the actual text or script variables they contain, supporting both plain text strings and regular expressions.
Příklady:
example.com$$div:contains("Sponsored by")
example.com$$script:contains(/ad_system_\d+/)
The first rule removes any <script> tag containing the word Adverts. The second targets any <div> containing the phrase Sponsored by. The third rule utilizes a regular expression to match dynamic script patterns.
The attributes listed below are legacy features kept only for backward compatibility. They may become unsupported in future updates. Prefer using the :contains() pseudo-class where it is available.
tag-content
This is the most frequently used special attribute. It limits selection with those elements whose innerHTML code contains the specified substring.
You must use "" to escape ", for instance: $$script[tag-content="alert(""this is ad"")"]
For example, take a look at this HTML code:
<script type="text/javascript">
document.write('<div>banner text</div>" />');
</script>
Following rule will delete all script elements with a banner substring in their code:
$$script[tag-content="banner"]
The tag-content special attribute must not appear in a selector to the left of a > combinator.
This limitation does not apply to AdGuard Browser Extension v5.3 or later.
wildcard
This special attribute works almost like tag-content and allows you to check the innerHTML code of the document. Rule will check if HTML code of the element fits the search pattern.
You must use "" to escape ", for instance: $$script[wildcard=""banner""]
For example: $$script[wildcard="*banner*text*"]
It checks if the element code contains the two consecutive substrings banner and text.
The wildcard special attribute must not appear in a selector to the left of a > combinator.
This limitation does not apply to AdGuard Browser Extension v5.3 or later.
max-length
Specifies the maximum length for content of HTML element. If this parameter is set and the content length exceeds the value, a rule does not apply to the element.
Default value
If this parameter is not specified, the max-length is considered to be 8192.
Např:
$$div[tag-content="banner"][max-length="400"]
This rule will remove all the div elements, whose code contains the substring banner and the length of which does not exceed 400 characters.
The max-length special attribute must not appear in a selector to the left of a > combinator.
This limitation does not apply to AdGuard Browser Extension v5.3 or later.
min-length
Specifies the minimum length for content of HTML element. If this parameter is set and the content length is less than preset value, a rule does not apply to the element.
Např:
$$div[tag-content="banner"][min-length="400"]
This rule will remove all the div elements, whose code contains the substring banner and the length of which exceeds 400 characters.
The min-length special attribute must not appear in a selector to the left of a > combinator.
This limitation does not apply to AdGuard Browser Extension v5.3 or later.
Pseudotřídy
:contains()
Syntaxe
:contains(unquoted text)
nebo
:contains(/reg(ular )?ex(pression)?/)
:-abp-contains() and :has-text() are synonyms for :contains().
The :contains() pseudo-class is supported by AdGuard for Windows, AdGuard for Mac, AdGuard for Android, AdGuard for Linux with CoreLibs v1.13 or later, and AdGuard Browser Extension v5.3 or later.
Requires that the inner HTML of the element contains the specified text or matches the specified regular expression.
A :contains() pseudo-class must not appear in a selector to the left of a > combinator.
This limitation does not apply to AdGuard Browser Extension v5.3 or later.
Výjimky
Similar to hiding rules, there is a special type of rules that disable the selected HTML filtering rule for particular domains. The syntax is the same, you just have to change $$ to $@$.
For example, there is a rule in filter:
$$script[tag-content="banner"]
If you want to disable it for example.com, you can create an exception rule:
example.com$@$script[tag-content="banner"]
Sometimes, it may be necessary to disable all restriction rules. For example, to conduct tests. To do this, use the exclusion rule without specifying a domain.
$@$script[tag-content="banner"]
We recommend to use this kind of exceptions only if it is not possible to change the hiding rule itself. In other cases it is better to change the original rule, using domain restrictions.
Pravidla JavaScript
AdGuard supports a special type of rules that allows you to inject any JavaScript code to websites pages.
We strongly recommend using scriptlets instead of JavaScript rules whenever possible. JS rules are supposed to help with debugging, but as a long-time solution a scriptlet rule should be used.
Syntaxe
rule = [domains] "#%#" script
domains— omezení domény pro dané pravidlo. Stejné zásady jako v pravidlech pro skrývání prvků.script— arbitrary JavaScript code in one string.
Příklady
example.org#%#window.__gaq = undefined;executes the codewindow.__gaq = undefined;on all pages atexample.organd all subdomains.
Výjimky
Similar to hiding rules, there is a special type of rules that disable the selected JavaScript rule for particular domains. The syntax is the same, you just have to change #%# to #@%#.
For example, there is a rule in filter:
#%#window.__gaq = undefined;
If you want to disable it for example.com, you can create an exception rule:
example.com#@%#window.__gaq = undefined;
Sometimes, it may be necessary to disable all restriction rules. For example, to conduct tests. To do this, use the exclusion rule without specifying a domain.
#@%#window.__gaq = undefined;
We recommend to use this kind of exceptions only if it is not possible to change the hiding rule itself. In other cases it is better to change the original rule, using domain restrictions.
JavaScript rules can only be used in trusted filters.
JavaScript rules are not supported by AdGuard Content Blocker.
Pravidla skriptlet
Scriptlet is a JavaScript function that provides extended capabilities for content blocking. These functions can be used in a declarative manner in AdGuard filtering rules.
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
AdGuard supports a lot of different scriptlets. In order to achieve cross-blocker compatibility, we also support syntax of uBO and ABP.
:::
Blocking rules syntax
[domains]#%#//scriptlet(name[, arguments])
domains— optional, a list of domains where the rule should be applied;name— required, a name of the scriptlet from the AdGuard Scriptlets library;arguments— optional, a list ofstringarguments (no other types of arguments are supported).
Příklady
-
Apply the
abort-on-property-readscriptlet on all pages ofexample.organd its subdomains, and pass it analertargument:example.org#%#//scriptlet('abort-on-property-read', 'alert') -
Remove the
brandingclass from alldiv[class^="inner"]elements on all pages ofexample.organd its subdomains:example.org#%#//scriptlet('remove-class', 'branding', 'div[class^="inner"]')
Exception rules syntax
Exception rules can disable some scriptlets on particular domains. The syntax for exception scriptlet rules is similar to normal scriptlet rules but uses #@%# instead of #%#:
[domains]#@%#//scriptlet([name[, arguments]])
domains— optional, a list of domains where the rule should be applied;name— optional, a name of the scriptlet to except from the applying; if not set, all scriptlets will not be applied;arguments— optional, a list ofstringarguments to match the same blocking rule and disable it.
Příklady
-
Disable specific scriptlet rule so that only
abort-on-property-readis applied only onexample.organd its subdomains:example.org,example.com#%#//scriptlet("abort-on-property-read", "alert")example.com#@%#//scriptlet("abort-on-property-read", "alert") -
Disable all
abort-on-property-readscriptlets forexample.comand its subdomains:example.org,example.com#%#//scriptlet("abort-on-property-read", "alert")example.com#@%#//scriptlet("abort-on-property-read") -
Disable all scriptlets for
example.comand its subdomains:example.org,example.com#%#//scriptlet("abort-on-property-read", "alert")example.com#@%#//scriptlet() -
Apply
set-constantandset-cookieto any web page, but due to special scriptlet exception rule only theset-constantscriptlet will be applied onexample.organd its subdomains:#%#//scriptlet('set-constant', 'adList', 'emptyArr')#%#//scriptlet('set-cookie', 'accepted', 'true')example.org#@%#//scriptlet('set-cookie') -
Apply
adjust-setIntervalto any web page andset-local-storage-itemonexample.comand its subdomains, but there are also multiple scriptlet exception rules, so no scriptlet rules will be applied onexample.comand its subdomains:#%#//scriptlet('adjust-setInterval', 'count', '*', '0.001')example.com#%#//scriptlet('set-local-storage-item', 'ALLOW_COOKIES', 'false')example.com#@%#//scriptlet()
Learn more about how to debug scriptlets.
More information about scriptlets can be found on GitHub.
Scriptlets rules can only be used in trusted filters.
Scriptlet rules are not supported by AdGuard Content Blocker.
The full syntax of scriptlet exception rules is supported by AdGuard for Windows, AdGuard for Mac, AdGuard for Android, and AdGuard for Linux with CoreLibs v1.16 or later, and AdGuard Browser Extension for Chrome, Firefox, and Edge with TSUrlFilter v3.0 or later. Previous versions only support exception rules that disable specific scriptlets.
Důvěryhodné skriptlety
Trusted scriptlets are scriptlets with extended functionality. It means the same syntax and restrictions. Trusted scriptlet names are prefixed with trusted-, e.g. trusted-set-cookie, to be easily distinguished from common scriptlets.
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
Trusted scriptlets are not compatible with other ad blockers except AdGuard.
:::
Trusted scriptlets rules can only be used in trusted filters.
Trusted scriptlets rules are not supported by AdGuard Content Blocker.
Learn more about how to debug scriptlets.
More information about trusted scriptlets can be found on GitHub.
Modifikátory pro ostatní typ pravidel
Each rule can be modified using the modifiers described in the following paragraphs.
Syntaxe
rule = "[$" modifiers "]" [rule text]
modifiers = modifier0[, modifier1[, ...[, modifierN]]]
modifier— set of the modifiers described below.rule text— a rule to be modified.
For example, [$domain=example.com,app=test_app]##selector.
In the modifiers values, the following characters must be escaped: [, ], ,, and \ (unless it is used for the escaping). Use \ to escape them. For example, an escaped bracket looks like this: \].
| Modifikátor \ Produkty | Aplikace CoreLibs | AdGuard pro Chromium | AdGuard pro Chrome MV3 | AdGuard pro Firefox | AdGuard pro iOS | AdGuard pro Safari | Blokátor obsahu AdGuard |
|---|---|---|---|---|---|---|---|
| $app | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| $domain | ✅ | ✅ | ✅ *[1] | ✅ | ✅ | ✅ | ❌ |
| $path | ✅ | ✅ *[2] | ❌ | ✅ *[2] | ✅ | ✅ | ❌ |
| $url | ✅ | ✅ *[3] | ✅ *[3] | ✅ *[3] | ❌ | ❌ | ❌ |
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
- ✅ — plně podporováno
- ✅ * — podporováno, ale spolehlivost se může lišit nebo se mohou vyskytnout omezení; více informací naleznete v popisu modifikátoru
- ❌ — nepodporováno
:::
$app
$app modifier lets you narrow the rule coverage down to a specific application or a list of applications. The modifier's behavior and syntax perfectly match the corresponding basic rules $app modifier.
Příklady
[$app=org.example.app]example.com##.textadhides adivwith the classtextadatexample.comand all subdomains in requests sent from theorg.example.appAndroid app.[$app=~org.example.app1|~org.example.app2]example.com##.textadhides adivwith the classtextadatexample.comand all subdomains in requests sent from any app exceptorg.example.app1andorg.example.app2.[$app=com.apple.Safari]example.org#%#//scriptlet('prevent-setInterval', 'check', '!300')applies scriptletprevent-setIntervalonly in Safari browser on Mac.[$app=org.example.app]#@#.textaddisables all##.textadrules for all domains while usingorg.example.app.
Such rules with $app modifier are supported by AdGuard for Windows, AdGuard for Mac, AdGuard for Android, and AdGuard for Linux.
$domain
$domain modifier limits the rule application area to a list of domains and their subdomains. The modifier's behavior and syntax perfectly match the corresponding basic rules $domain modifier.
Příklady
[$domain=example.com]##.textad— hides adivwith the classtextadatexample.comand all subdomains.[$domain=example.com|example.org]###adblock— hides an element with attributeidequalsadblockatexample.com,example.organd all subdomains.[$domain=~example.com]##.textad— this rule hidesdivelements of the classtextadfor all domains, exceptexample.comand its subdomains.
There are 2 ways to specify domain restrictions for non-basic rules:
- the "classic" way is to specify domains before rule mask and attributes:
example.com##.textad; - the modifier approach is to specify domains via
$domainmodifier:[$domain=example.com]##.textad.
But rules with mixed style domains restriction are considered invalid. So, for example, the rule [$domain=example.org]example.com##.textad will be ignored.
Nezákladní omezení modifikátoru $domain
Since the non-basic $domain works the same as the basic one, it has the same limitations.
Such rules with $domain modifier are supported by AdGuard for Windows, AdGuard for Mac, AdGuard for Android, AdGuard Browser Extension for Chrome, Chrome MV3, Firefox, and Edge.
$path
$path modifier limits the rule application area to specific locations or pages on websites.
Syntaxe
$path ["=" pattern]
pattern — optional, a path mask to which the rule is restricted. Its syntax and behavior are pretty much the same as with the pattern for basic rules. You can also use special characters, except for ||, which does not make any sense in this case (see examples below).
If pattern is not set for $path, rule will apply only on the main page of website.
$path modifier matches the query string as well.
$path modifier supports regular expressions in the same way basic rules do.
Příklady
[$path=page.html]##.textadhides adivwith the classtextadat/page.htmlor/page.html?<query>or/sub/page.htmlor/another_page.html[$path=/page.html]##.textadhides adivwith the classtextadat/page.htmlor/page.html?<query>or/sub/page.htmlof any domain but not at/another_page.html[$path=|/page.html]##.textadhides adivwith the classtextadat/page.htmlor/page.html?<query>of any domain but not at/sub/page.html[$path=/page.html|]##.textadhides adivwith the classtextadat/page.htmlor/sub/page.htmlof any domain but not at/page.html?<query>[$path=/page*.html]example.com##.textadhides adivwith the classtextadat/page1.htmlor/page2.htmlor any other path matching/page<...>.htmlofexample.com[$path]example.com##.textadhides adivwith the classtextadat the main page ofexample.com[$domain=example.com,path=/page.html]##.textadhides adivwith the classtextadatpage.htmlofexample.comand all subdomains but not atanother_page.html[$path=/\\/(sub1|sub2)\\/page\\.html/]##.textadhides adivwith the classtextadat both/sub1/page.htmland/sub2/page.htmlof any domain (please note the escaped special characters)
Path-in-domain syntax
For cosmetic rules, you can use a simplified path-in-domain syntax by specifying the path directly in the domain part of the rule instead of using the $path modifier.
Syntaxe
rule = [targets] "##" selector
targets = [target0, target1[, ...[, targetN]]]
target = domain [path]
Příklady:
example.org/checkout##.promo-banner— hides.promo-bannerelements only on checkout pagesnews.site.com/article##.sidebar-ad— hides sidebar ads only on article pagesdomain1.com,example.org/path##.banner— applies to all pages ondomain1.comand only/pathpages onexample.org/example\.org\/article\d+/##.ad— hides ads on article pages with numeric IDs
Path-in-domain syntax works with all types of cosmetic rules (##, #@#, #$#, $$, $@$, #%#, #@%#)
Path-in-domain syntax has been introduced in CoreLibs v1.20, Browser extension v5.4.
$path modifier limitations
In AdGuard Browser Extension, the non-basic $path modifier is compatible with other non-basic modifiers only when it is placed last, e.g., [$domain=/example.(com|org)/,path=/foo]##.ad. Otherwise, it may not work as expected.
Rules with $path modifier are not supported by AdGuard Content Blocker.
$url
$url modifier limits the rule application area to URLs matching the specified mask.
Syntaxe
url = pattern
where pattern is pretty much the same as pattern of the basic rules assuming that some characters must be escaped. The special characters and regular expressions are supported as well.
Příklady
[$url=||example.com/content/*]##div.textadhides adivwith the classtextadat addresses likehttps://example.com/content/article.htmland evenhttps://subdomain.example.com/content/article.html.[$url=||example.org^]###adblockhides an element with attributeidequal toadblockatexample.organd its subdomains.[$url=/\[a-z\]+\\.example\\.com^/]##.textadhidesdivelements of the classtextadfor all domains matching the regular expression[a-z]+\.example\.com^.
$url modifier limitations
Rules with the $url modifier are supported by AdGuard for Windows, AdGuard for Mac, AdGuard for Android, and AdGuard for Linux with CoreLibs v1.11 or later, and AdGuard Browser Extension with TSUrlFilter v3.0.0 or later.
Informace pro správce filtrů
If you maintain a third-party filter that is known to AdGuard, you might be interested in the information presented in this section. Please note that hints will be applied to registered filters only. The filter is considered to be registered and known by AdGuard, if it is present in the known filters index. If you want your filter to be registered, please file an issue to AdguardFilters repo.
Direktivy preprocesoru
We provide preprocessor directives that can be used by filter maintainers to improve compatibility with different ad blockers and provide:
- including a file
- applying rules conditionally by ad blocker type
- content blocker specifying for rules applying in Safari
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
Any mistake in a preprocessor directive will lead to AdGuard failing the filter update in the same way as if the filter URL was unavailable.
Preprocessor directives can be used in the user rules or in the custom filters.
:::
Including a file
The !#include directive allows to include contents of a specified file into the filter. It supports only files from the same origin to make sure that the filter maintainer is in control of the specified file. The included file can also contain pre-directives (even other !#include directives). Ad blockers should consider the case of recursive !#include and implement a protection mechanism.
Syntaxe
!#include file_path
where file_path is a same origin absolute or relative file path to be included.
The files must originate from the same domain, but may be located in a different folder.
If included file is not found or unavailable, the whole filter update should fail.
Same-origin limitation should be disabled for local custom filters.
Příklady
Filter URL: https://example.org/path/filter.txt
! Valid (same origin):
!#include https://example.org/path/includedfile.txt
!
! Valid (relative path):
!#include /includedfile.txt
!#include ../path2/includedfile.txt
!
! Invalid (another origin):
!#include https://domain.com/path/includedfile.txt
Conditions
Filter maintainers can use conditions to supply different rules depending on the ad blocker type. A conditional directive beginning with an !#if directive must explicitly be terminated with an !#endif directive. Conditions support all basic logical operators.
There are two possible scenarios:
-
When an ad blocker encounters an
!#ifdirective and no!#elsedirective, it will compile the code between!#ifand!#endifdirectives only if the specified condition is true. -
If there is an
!#elsedirective, the code between!#ifand!#elsewill be compiled if the condition is true; otherwise, the code between!#elseand!#endifwill be compiled.
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
Whitespaces matter. !#if is a valid directive, while !# if is not.
:::
Syntaxe
!#if (conditions)
rules_list
!#endif
nebo
!#if (conditions)
true_conditions_rules_list
!#else
false_conditions_rules_list
!#endif
kde:
!#if (conditions)— start of the block when conditions are trueconditions— just like in some popular programming languages, preprocessor conditions are based on constants declared by ad blockers. Authors of ad blockers define on their own what exact constants they declare. Possible values:adguardalways declared; shows maintainers that this is one of AdGuard products; should be enough in 95% of cases- product-specific constants for cases when you need a rule to work (or not work — then
!should be used before constant) in a specific product only:adguard_app_windows— AdGuard for Windowsadguard_app_mac— AdGuard for Macadguard_app_cli— AdGuard for Linuxadguard_app_android— AdGuard for Androidadguard_app_ios— AdGuard for iOSadguard_ext_safari— AdGuard for Safariadguard_ext_chromium— AdGuard Browser Extension for Chrome (and chromium-based browsers, e.g. new Microsoft Edge)adguard_ext_chromium_mv3— AdGuard for Chrome MV3adguard_ext_firefox— AdGuard Browser Extension for Firefoxadguard_ext_edge— AdGuard Browser Extension for Edge Legacyadguard_ext_opera— AdGuard Browser Extension for Operaadguard_ext_android_cb— AdGuard Content Blocker for mobile Samsung and Yandex browsersext_ublock— special case; this one is declared when a uBlock version of a filter is compiled by the FiltersRegistrycap_html_filtering— products that support HTML filtering rules: AdGuard for Windows, AdGuard for Mac, AdGuard for Android, and AdGuard for Linux
!#else— start of the block when conditions are falserules_list,true_conditions_rules_list,false_conditions_rules_list— lists of rules!#endif— end of the block
Příklady
! for all AdGuard products except AdGuard for Safari
!#if (adguard && !adguard_ext_safari)
||example.org^$third-party
domain.com##div.ad
!#endif
! directives even can be combined
!#if (adguard_app_android)
!#include /androidspecific.txt
!#endif
!#if (adguard && !adguard_ext_safari)
! for all AdGuard products except AdGuard for Safari
||example.org^$third-party
domain.com##div.ad
!#else
! for AdGuard for Safari only
||subdomain.example.org^$third-party
!#endif
The !#else directive is supported by the FiltersDownloader v1.1.20 or later.
It is already supported for filter lists compiled by the FiltersRegistry, but it still may not be supported by AdGuard products when adding a filter list with !#else as a custom one. The following products will support it in the mentioned versions or later:
- AdGuard for Windows, Mac, and Android with CoreLibs v1.13;
- AdGuard Browser Extension v4.2.208;
- AdGuard for Safari v1.11.16.
Safari affinity
Safari's limit for each content blocker is 150,000 active rules. But in AdGuard for Safari and AdGuard for iOS, we've split the rules into 6 content blockers, thus increasing the rule limit to 900,000.
Here is the composition of each content blocker:
- AdGuard General — Ad Blocking, Language-specific
- AdGuard Privacy — Privacy
- AdGuard Social — Social Widgets, Annoyances
- AdGuard Security — Security
- AdGuard Other — Other
- AdGuard Custom — Custom
User rules and allowlist are added to every content blocker.
The main disadvantage of using multiple content blockers is that rules from different blockers are applied independently. Blocking rules are not affected by this, but unblocking rules may cause problems. If a blocking rule is in one content blocker and an exception is in another, the exception will not work. Filter maintainers use !#safari_cb_affinity to define Safari content blocker affinity for the rules inside of the directive block.
Syntaxe
!#safari_cb_affinity(content_blockers)
rules_list
!#safari_cb_affinity
kde:
!#safari_cb_affinity(content_blockers)— start of the blockcontent_blockers— comma-separated list of content blockers. Possible values:general— AdGuard General content blockerprivacy— AdGuard Privacy content blockersocial— AdGuard Social content blockersecurity— AdGuard Security content blockerother— AdGuard Other content blockercustom— AdGuard Custom content blockerall— special keyword that means that the rules must be included into all content blockers
rules_list— list of rules!#safari_cb_affinity— end of the block
Příklady
! to unhide specific element which is hidden by AdGuard Base filter:
!#safari_cb_affinity(general)
example.org#@#.adBanner
!#safari_cb_affinity
! to allowlist basic rule from AdGuard Tracking Protection filter:
!#safari_cb_affinity(privacy)
@@||example.org^
!#safari_cb_affinity
Nápovědy
"Hint" is a special comment, instruction to the filters compiler used on the server side (see FiltersRegistry).
Syntaxe
!+ HINT_NAME1(PARAMS) HINT_NAME2(PARAMS)
Multiple hints can be applied.
NOT_OPTIMIZED hint
For each filter, AdGuard compiles two versions: full and optimized. Optimized version is much more lightweight and does not contain rules which are not used at all or used rarely.
Rules usage frequency comes from the collected filter rules statistics. But filters optimization is based on more than that — some filters have specific configuration. This is how it looks like for Base filter:
"filter": AdGuard Base filter,
"percent": 30,
"minPercent": 20,
"maxPercent": 40,
"strict": true
kde:
- filter — filter identifier
- percent — expected optimization percent
~= (rules count in optimized filter) / (rules count in original filter) * 100 - minPercent — lower bound of
percentvalue - maxPercent — upper bound of
percentvalue - strict — if
percent < minPercentORpercent > maxPercentand strict mode is on then filter compilation should fail, otherwise original rules must be used
In other words, percent is the "compression level". For instance, for the Base filter it is configured to 40%. It means that optimization algorithm should strip 60% of rules.
Eventually, here are the two versions of the Base filter for AdGuard Browser Extension:
- full: https://filters.adtidy.org/extension/chromium/filters/2.txt
- optimized: https://filters.adtidy.org/extension/chromium/filters/2_optimized.txt
If you want to add a rule which should not be removed at optimization use the NOT_OPTIMIZED hint:
!+ NOT_OPTIMIZED
||example.org^
And this rule will not be optimized only for AdGuard for Android:
!+ NOT_OPTIMIZED PLATFORM(android)
||example.org^
PLATFORM and NOT_PLATFORM hints
Used to specify the platforms to apply the rules. List of existing platforms and links to Base filter, for example, for each of them:
-
windows— AdGuard for Windows — https://filters.adtidy.org/windows/filters/2.txt -
mac— AdGuard for Mac — https://filters.adtidy.org/mac_v3/filters/2.txt -
cli— AdGuard for Linux — https://filters.adtidy.org/cli/filters/2.txt -
android— AdGuard for Android — https://filters.adtidy.org/android/filters/2_optimized.txt -
ios— AdGuard for iOS — https://filters.adtidy.org/ios/filters/2_optimized.txt -
ext_chromium— AdGuard Browser Extension for Chrome — https://filters.adtidy.org/extension/chromium/filters/2.txt -
ext_chromium_mv3— AdGuard Browser Extension for Chrome MV3 — https://filters.adtidy.org/extension/chromium-mv3/filters/2.txt -
ext_ff— AdGuard Browser Extension for Firefox — https://filters.adtidy.org/extension/firefox/filters/2.txt -
ext_edge— AdGuard Browser Extension for Edge — https://filters.adtidy.org/extension/edge/filters/2.txt -
ext_opera— AdGuard Browser Extension for Opera — https://filters.adtidy.org/extension/opera/filters/2.txt -
ext_safari— AdGuard for Safari — https://filters.adtidy.org/extension/safari/filters/2_optimized.txt -
ext_android_cb— AdGuard Content Blocker — https://filters.adtidy.org/extension/android-content-blocker/filters/2_optimized.txt -
ext_ublock— uBlock Origin — https://filters.adtidy.org/extension/ublock/filters/2.txt
Příklady
This rule will be available only in AdGuard for Windows, Mac, Android:
!+ PLATFORM(windows,mac,android)
||example.org^
Except for AdGuard for Safari, AdGuard Content Blocker, and AdGuard for iOS, this rule is available on all platforms:
!+ NOT_PLATFORM(ext_safari, ext_android_cb, ios)
||example.org^
NOT_VALIDATE
This hint is used to skip validation of the rule. It is useful for rules for which support has not yet been added to the filters compiler, or for rules that are incorrectly discarded.
If you want to add a rule that should not be validated, use the NOT_VALIDATE hint:
!+ NOT_VALIDATE
||example.org^$newmodifier
Jak ladit pravidla filtrování
It may be possible to create simple filtering rules "in your head" but for anything even slightly more complicated you will need additional tools to debug and iterate them. There are tools to assist you with that. You can use DevTools in Chrome and its analogs in other browsers but most AdGuard products provide another one — Filtering log.
Záznam filtrování
Filtering log is an advanced tool that will be helpful mostly to filter developers. It lists all web requests that pass through AdGuard, gives you exhaustive information on each of them, offers multiple sorting options, and has other useful features.
Depending on which AdGuard product you are using, Filtering log can be located in different places.
- In AdGuard for Windows, you can find it in the Ad Blocker tab or via the tray menu
- In AdGuard for Mac, it is located in Settings → Advanced → Filtering log
- In AdGuard for Android, you can find it under Statistics → Recent activity. Recent activity can also be accessed from the Assistant
- In AdGuard Browser Extension, it is accessible from the Miscellaneous settings tab or by right-clicking the extension icon. Only Chromium- and Firefox-based web browsers show applied element hiding rules (including CSS, ExtCSS) and JS rules and scriptlets in their Filtering logs
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
In AdGuard for iOS and AdGuard for Safari, Filtering log does not exist because of the way content blockers are implemented in Safari. AdGuard does not see the web requests and therefore cannot display them.
:::
Režim ladění selektorů
Sometimes, you might need to check the performance of a given selector or a stylesheet. In order to do it without interacting with JavaScript directly, you can use a special debug style property. When ExtendedCss meets this property, it enables the debugging mode either for a single selector or for all selectors, depending on the debug value.
Open the browser console while on a web page to see the timing statistics for selector(s) that were applied there. Debugging mode displays the following stats as object where each of the debugged selectors are keys, and value is an object with such properties:
Always printed:
selectorParsed— text of the parsed selector, may differ from the input onetimings— list of DOM nodes matched by the selectorappliesCount— total number of times that the selector has been applied on the pageappliesTimings— time that it took to apply the selector on the page, for each of the instances that it has been applied (in milliseconds)meanTiming— mean time that it took to apply the selector on the pagestandardDeviation— standard deviationtimingsSum— total time it took to apply the selector on the page across all instances
Printed only for remove pseudos:
removed— flag to signal if elements were removed
Printed if elements are not removed:
matchedElements— list of DOM nodes matched by the selectorstyleApplied— parsed rule style declaration related to the selector
Příklady
Debugging a single selector:
When the value of the debug property is true, only information about this selector will be shown in the browser console.
#$?#.banner { display: none; debug: true; }
Enabling global debug:
When the value of the debug property is global, the console will display information about all extended CSS selectors that have matches on the current page, for all the rules from any of the enabled filters.
#$?#.banner { display: none; debug: global; }
Testing extended selectors without AdGuard
ExtendedCss can be executed on any page without using any AdGuard product. In order to do that you should copy and execute the following code in a browser console:
!function(e,t,d){C=e.createElement(t),C.src=d,C.onload=function(){alert("ExtendedCss loaded successfully")},s=e.getElementsByTagName(t)[0],s?s.parentNode.insertBefore(C,s):(h=e.getElementsByTagName("head")[0],h.appendChild(C))}(document,"script","https://AdguardTeam.github.io/ExtendedCss/extended-css.min.js");
Alternatively, install the ExtendedCssDebugger userscript.
Now you can now use the ExtendedCss from global scope, and run its method query() as Document.querySelectorAll().
Příklady
const selector = 'div.block:has=(.header:matches-css(after, content: Ads))';
// array of HTMLElements matched the `selector` is to be returned
ExtendedCss.query(selector);
Ladění skriptletů
If you are using AdGuard Browser Extension and want to debug a scriptlet or a trusted scriptlet rule, you can get additional information by opening the Filtering log. In that case, scriptlets will switch to debug mode and there will be more information in the browser console.
The following scriptlets are especially developed for debug purposes:
debug-current-inline-scriptdebug-on-property-readdebug-on-property-writelog-addEventListenerlog-on-stack-tracelog-evallog
The following scriptlets also may be used for debug purposes:
json-pruneprevent-fetchprevent-requestAnimationFrameprevent-setIntervalprevent-setTimeoutprevent-window-openwith specifiedreplacementparameterprevent-xhrtrusted-replace-fetch-responsetrusted-replace-xhr-response
Legenda tabulek kompatibility
Zkratky produktů
CoreLibs apps— AdGuard for Windows, AdGuard for Mac, AdGuard for Android, and AdGuard for LinuxAdGuard for Chromium— AdGuard Browser Extension for Chrome and other Chromium-based browsers such as Microsoft Edge and OperaAdGuard for Chrome MV3— AdGuard Browser Extension for Chrome MV3AdGuard for Firefox— AdGuard Browser Extension for FirefoxAdGuard for iOS— AdGuard for iOS and AdGuard Pro for iOS (for mobile Safari browser)AdGuard for Safari— AdGuard for desktop Safari browserAdGuard Content Blocker— Content Blocker for Android mobile browsers: Samsung Internet and Yandex Browser
Zkratky kompatibility
Zakazuje prohlížeči Google Chrome odesílat informace o verzi a modifikaci s požadavky na domény Google (včetně DoubleClick a Google Analytics).
- ✅ — plně podporováno
- ✅ * — podporováno, ale spolehlivost se může lišit nebo se mohou vyskytnout omezení; více informací naleznete v popisu modifikátoru
- 🧩 — may already be implemented in nightly or beta versions but is not yet supported in release versions
- ⏳ — feature that is planned to be implemented but is not yet available in any product
- ❌ — nepodporováno
- 👎 — zastaralé; stále podporovano, ale v budoucnu bude odstraněno
- 🚫 — odstraněno a již nepodporováno
:::






