Браузерное расширение MV3 0.4.0: время большого обновления
C релиза расширения на базе MV3 прошло почти полтора года, и пришло время большого обновления — раз уж мы всё-таки живём в реальности MV3. Теперь в расширении свежие версии наших фильтрующих библиотек TSWebExtension и TSUrlFilter. Вспомнить, как начинался путь к первому расширению, работающему в рамках Manifest V3, можно в нашем блоге.
5 причин, почему расширение стало лучше
1. Новая схема приоритетов
Раньше у нас было 4 ранжированных группы правил, но выбор правила внутри одной группы и приоритет были неочевидными. В новой схеме вес правила рассчитывается в момент конвертации исходя из модификаторов, из которых это правило состоит. У каждой группы модификаторов свой фиксированный вес, либо вес группы можно рассчитать по формуле. Благодаря этому на этапе конвертации можно задать правилу декларативный приоритет, который идеально подходит под новый MV3. Подробнее про новую схему приоритетов можно почитать в нашей Базе знаний.
2. Поддержка правил с модификатором $badfilter
Модификатор $badfilter
обладает властью отменять любые другие правила. Как это работает: разработчики фильтров добавляют правило с этим модификатором, расширение динамически получает обновление, и новое правило отключает правило, на которое ссылается.
Однако в MV3 нельзя отменить ранее добавленное правило, и мы добавили поддержку $badfilter
только для тех правил, которые уже есть в том же самом файле. То есть, если у вас правило в одном файле, а $badfilter
для него вы добавили в другом — ничего не выйдет.
Так было до тех пор, пока рабочая группа W3C не прислушалась к разработчикам расширений и не добавила новое API, позволяющее отменять другие декларативные правила. Пользуясь случаем, мы добавили поддержку $badfilter
для всех правил во всех файлах. Для этого переделали схему конвертации правил так, чтобы генерировать дополнительные метаданные для фильтров и сразу находить правила, которые нужно отменить.
3. Поддержка модификатора $cookie
Модификатор $cookie
позволяет задавать время жизни (TTL) файлов куки. Текущего функциональности MV3 не хватает для полноценной работы этого модификатора, поэтому мы реализовали его поддержку таким способом:
- Если для работы фильтрующего правила достаточно API MV3, то правило конвертируется в декларативное и включается в набор статических правил
- В противном случае мы дополнительно обрабатываем файлы куки в нашем движке TSUrlFilter и с помощью браузерного API browser.cookies удаляем файлы куки, которые не должны быть установлены, или сокращаем время их жизни
4. Поддержка модификаторов $elemhide
, $generichide
, $specifichide
Их мы используем для отключения косметической фильтрации на указанных сайтах. В MV3 пока что нет подобных инструментов, поэтому мы добавили поддержку модификаторов через наш внутренний движок фильтрации TSUrlFilter. Он сопоставляет правила блокировки с правилами-исключениями и отдаёт на сторону контент-скрипта только неотменённые правила.
5. Всё остальное
Добавили поддержку модификаторов:
$method
— этот модификатор ограничивает область действия правила запросами, использующими указанный набор методов HTTP$to
ограничивает область действия правила запросами, сделанными на указанные домены и их поддомены$removeheader
— правила с этим модификатором нужны, чтобы убирать заголовки HTTP-запросов и ответов$all
состоит из всех модификаторов content-type и$popup
$csp
— этот модификатор полностью меняет поведение страницы. Когда он применяется, правило не блокирует запрос, а вместо этого изменяются заголовки ответа
Это первый блокировщик рекламы, работающий в жёстких условиях Manifest V3, и вы очень нам поможете, если сообщите на GitHub о проблемах в расширении.