ublock icon indicating copy to clipboard operation
ublock copied to clipboard

Совместимость Adguard, техническое

Open mtxadmin opened this issue 1 year ago • 0 comments

К вопросу о #83 https://raw.githubusercontent.com/mtxadmin/ublock/master/it.txt

Поверхностно просмотрел, какие подводные камни могут быть при включении в Adguard

Ну !#include там тоже есть. https://adguard.com/kb/ru/general/ad-filtering/create-own-filters/#include-directive

Параметры разработчики старались называть одинаково, и логика работы та же.

Скриптлеты могут не совпасть (см. там же), но большой проблемы от этого случиться не должно. И вообще, все ##+js , похоже, съедут - "#%#//scriptlet(" scriptletName arguments ")" https://adguard.com/kb/ru/general/ad-filtering/create-own-filters/#scriptlets

Вот здесь может быть засада, из лучших побуждений разработчиков: https://adguard.com/kb/ru/general/ad-filtering/create-own-filters/#trusted-filters "Некоторые правила можно использовать только в доверенных фильтрах." Причём, список ограничений не указан - то есть, это первый кандидат на множественные подводные камни. Ниже по тексту можно найти упоминания, что там запрещено:

  • Правила JavaScript. Это ладно
  • Скриплеты. Странно и непонятно, зачем их запретили. Неприятно, но, в целом не смертельно.
  • $hls. Интересно.
  • $removeheader.
  • $removeparam. Очень плохо.
  • $replace.

https://adguard.com/kb/ru/general/ad-filtering/create-own-filters/#adguard-content-blocker Ужас-ужас, совершенно урезанная версия этот AdGuard Content Blocker.

https://adguard.com/kb/ru/general/ad-filtering/create-own-filters/#wildcard-for-tld "для AdGuard для Safari и iOS поддерживаемый список доменов верхнего уровня ограничен из-за ограничений Safari."

Про приоритеты подробно, что-то новое. В вики uBlock Origin этого момента не видел. https://adguard.com/kb/ru/general/ad-filtering/create-own-filters/#rule-priorities Не то, чтобы было сильно важно, но интересная деталь

И еще про приоритеты https://adguard.com/kb/ru/general/ad-filtering/create-own-filters/#cosmetic-rules-priority

В расширенных CSS-селекторах чуть другой синтаксис https://adguard.com/kb/ru/general/ad-filtering/create-own-filters/#extended-css-selectors "#?# — для скрытия элементов, #@?# — для исключений #$?# — для CSS-стилей, #@$?# — для исключений Настоятельно рекомендуем использовать эти маркеры каждый раз, когда вы используете расширенный CSS-селектор."

  • то есть, можно и без них, и будет совместимо?

:matches-css() : https://adguard.com/kb/ru/general/ad-filtering/create-own-filters/#extended-css-matches-css " Для нерегулярных выражений паттерны (,),[,] должны быть без экранирования, например, :matches-css(background-image:url(data:*)).

Для регулярных выражений паттерны \ должны быть экранированы, например, :matches-css(background-image: /^url\("data:image\/gif;base64.+/). "

:matches-attr() : https://adguard.com/kb/ru/general/ad-filtering/create-own-filters/#extended-css-matches-attr " The :matches-attr() pseudo-class allows selecting an element by its attributes, especially if they are randomized.

target — optional, standard or extended CSS selector, can be skipped for checking any element name — требуется, простая строка, или строка с подстановочным знаком, или регулярное выражение для сопоставления имени атрибута value — необязательный, простая строка, или строка с подстановочным знаком, или регулярное выражение для сопоставления значения атрибута "

:matches-property() : https://adguard.com/kb/ru/general/ad-filtering/create-own-filters/#extended-css-property " The :matches-property() pseudo-class allows selecting an element by matching its properties.

target — optional, standard or extended CSS selector, can be skipped for checking any element name — требуется, простая строка, или строка с подстановочным знаком, или регулярное выражение для сопоставления имени свойства элемента value — необязательный, простая строка, или строка с подстановочным знаком, или регулярное выражение для сопоставления значения свойства элемента "

tag-content https://adguard.com/kb/ru/general/ad-filtering/create-own-filters/#tag-content " В будущем этот специальный атрибут может перестать поддерживаться. Предпочтительнее использовать псевдокласс :contains() там, где это возможно.

Пожалуй, наиболее часто используемый специальный атрибут. Он ограничивает выбор теми элементами, внутренний HTML-код которых (innerHTML) содержит указанную подстроку.

You must use "" to escape ", for instance: $$script[tag-content="alert(""this is ad"")"] "

$header https://adguard.com/kb/ru/general/ad-filtering/create-own-filters/#header-modifier Это не replace (тот запрещен), это реакция на HTTP-заголовок

mtxadmin avatar Jun 13 '24 14:06 mtxadmin