Когда очередной коварный баг в продакшене удаётся поймать только благодаря кастомному расширению для дебага сети, последнее, о чём хочется думать — это то, что сам инструмент завтра перестанет работать (примерно как легаси-код, который держится на честном слове и синей изоленте). Но индустрия неумолима: пока разработчики спорят о лучших практиках, браузерные гиганты переписывают правила игры под капотом. Microsoft официально подтвердила полный переход своего браузера Microsoft Edge на стандарт расширений Manifest V3. Это решение означает окончательный отказ от устаревшей архитектуры Manifest V2, на которой десятилетиями строились многие системные утилиты и инструменты разработчиков.
Главным техническим следствием этого шага стал поэтапный вывод из эксплуатации классических блокировщиков рекламы, включая культовый uBlock Origin. Поскольку Edge базируется на движке Chromium, политика безопасности и ограничения API здесь полностью повторяют сценарий Google Chrome. Разработчики расширений и продвинутые пользователи вынуждены перестраивать привычные рабочие процессы под жесткие лимиты новой платформы.
Техническая разница: Почему Manifest V3 ломает привычные блокировщики
Чтобы понять масштаб изменений под капотом браузера, нужно сравнить подходы V2 и V3 к обработке сетевых запросов и управлению фоновыми процессами. Разница кроется в безопасности, производительности и уровне контроля, который платформа доверяет стороннему софту, меняя привычные паттерны написания кода.
Service Workers против фоновых страниц
В Manifest V2 расширения использовали постоянные фоновые страницы (background pages), которые висели в памяти браузера и могли непрерывно анализировать трафик. Manifest V3 заменяет их на Service Workers:
- Service Worker не работает постоянно — он выгружается из памяти при бездействии и запускается заново по событию (живет примерно с тем же энтузиазмом, что и джун перед дедлайном).
- Это снижает потребление RAM, но критически усложняет работу расширений, которым требуется держать в памяти большие списки фильтров (миллионы правил).
- Прерывание сессий фоновых процессов может приводить к рассинхронизации состояния блокировщика и сетевого стека.
declarativeNetRequest API вместо динамических скриптов
Главный камень преткновения — отказ от динамического выполнения кода (eval и удаленных скриптов) в пользу декларативного API declarativeNetRequest.
// Пример старого подхода (Manifest V2): перехват и модификация на лету
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
return { cancel: shouldBlock(details.url) };
},
{urls: [""]},
["blocking"]
);
В Manifest V3 разработчики больше не могут писать произвольный код на JavaScript для анализа каждого запроса на лету. Вместо этого они должны передать статический набор правил самому браузеру, а движок Chromium уже сам решает, что блокировать. Лимит на количество таких правил долгое время был жестко ограничен, что напрямую ударило по эффективности комплексных фильтров рекламы и трекеров.
Судьба uBlock Origin и реакция сообщества
Популярнейший блокировщик uBlock Origin полностью завязан на динамических возможностях Manifest V2. Его создатель Гордон Иан (gorhill) неоднократно заявлял, что портирование инструмента на V3 в полном объеме технически невозможно без потери эффективности.
Компромиссным решением стал выпуск uBlock Origin Lite (uBOL). Это версия расширения, полностью переписанная под требования Manifest V3 и использующая декларативный подход. Однако сам автор позиционирует Lite-версию как эксперимент: она работает быстрее и безопаснее с точки зрения архитектуры Google, но пропускает часть сложных рекламных вставок и скриптов отслеживания, которые старый uBlock Origin успешно перехватывал на лету.
Что делать разработчикам и пользователям?
Переход на новые рельсы неизбежен для всей экосистем