У каждого расширения браузера есть свой манифест — простой файл JSON, который сообщает браузеру его имя, а также сообщает ему, как следует обрабатывать расширение, когда загружать какой скрипт и т. д. До недавнего времени использовалась версия 2 манифеста, которая достигла высокой кросс-платформенности. совместимость с браузером, так как большинство расширений можно загрузить в браузеры на основе Chrome и Firefox без изменений, специфичных для браузера.

Однако в 2018 году Google анонсировала Manifest версии 3, став пионером в продвижении следующей эволюции. Manifest v3 принес много новых концепций для увеличения срока службы батареи и конфиденциальности, а также позволил Google ограничить количество расширений, которые могут выполнять такие задачи, как блокировка рекламы.

С 2022 года Google не принимает новые расширения Manifest v2 в своем магазине и объявил, что все существующие расширения v2 перестанут работать в 2023 году.

Но до сих пор у Manifest v3 было тяжелое начало, и, похоже, он пока не может заменить v2:

Поддержка Firefox

Во-первых, Firefox до сих пор публично не развернул поддержку v3: попытка загрузить расширение v3 по-прежнему выдает ошибку о том, что Manifest v3 не является поддерживаемым типом. Mozilla объявила, что Manifest v3 находится в разработке и должен быть развернут в конце 2022 года — всего за несколько месяцев или недель до того, как Chrome прекратит их поддержку.

Удаление фоновых страниц

В Manifest v2 многие расширения в значительной степени полагались на фоновые страницы как на способ иметь постоянно активную изолированную страницу, которую можно использовать для всех текущих задач, которые необходимо выполнять расширению. Фоновые страницы ведут себя так же, как обычные вкладки, только с несколькими расширенными привилегиями, позволяющими получить доступ к большему количеству внутренних компонентов браузера.

В надежде уменьшить влияние расширений на батарею, Manifest v3 заменил эту функцию фоновыми рабочими — скриптами, которые ведут себя как сервисные работники в обычном Интернете и приостанавливаются через несколько минут.

Хотя многие расширения могут легко переключаться на этих рабочих процессов, другие варианты использования в настоящее время вообще невозможны. Расширения часто полагались на то, что они являются одним из компонентов, которые могут сохраняться на страницах и вкладках, используя фундаментальный строительный блок фоновых страниц, но это больше не разрешено.

Увидев эту проблему, разработчики Google в настоящее время собирают список вариантов использования, невозможных с Manifest v3, надеясь найти новый способ их решения. Знать, что эти обсуждения существуют, хорошо, но имейте в виду, что новые решения должны быть стандартизированы, реализованы, выпущены в браузеры, а затем внедрены, протестированы и выпущены в расширения каждым из их разработчиков до крайнего срока Google в 01/2023.

Текущие предложения сообщества включают в себя открытие пустой вкладки или окна в браузере, чтобы сообщить пользователю не закрывать его, но представьте, что вам нужно держать дюжину пустых вкладок открытыми только для того, чтобы ваши расширения работали так, как они работали раньше. Еще одно предложение открыть отдельный безголовый браузер Chrome и общаться с ним через встроенный обмен сообщениями — несомненно, наличие отдельного браузера, работающего в фоновом режиме, будет более разряжать батарею, чем просто разрешить постоянные фоновые страницы.

Пример: вкладка Capture

Chrome предлагает chrome.tabCapture API, который позволяет расширениям захватывать и изменять звук вкладок для таких случаев использования, как аудиозаписывающие устройства и усилители громкости.

Этот API «только для переднего плана», что означает, что его нельзя использовать в рабочих процессах, и он доступен только в привилегированных средах расширений, то есть во всплывающем окне и в фоновом режиме.

Глядя на эти требования, мы видим, что API нельзя использовать в скрипте контента на текущей странице. Но он также недоступен в новом фоновом воркере, так как он не считается передним планом и может быть приостановлен в любое время.

Это оставляет API доступным только во всплывающем окне на текущей вкладке. Как можно себе представить, необходимость постоянно открывать всплывающее окно расширения только для того, чтобы разрешить запись звука на текущей вкладке, не очень удобно для UX.

Конкурирующие решения

Одной из прелестей Manifest v2 была его кросс-браузерная совместимость. Хотя Chrome всегда настаивал на использовании chrome.* для API расширений вместо browser.*, как в Firefox, большинство расширений, которые работали в Chrome, также могли без проблем загружаться в Firefox.

В настоящее время ситуация с кроссбраузерной поддержкой в ​​расширениях Manifest v3 по-прежнему выглядит тревожной. В надежде решить проблему непостоянных фоновых страниц Google и Firefox предлагают разные решения.

Предлагаемое Google решение — это временные безголовые среды страниц, которые немного похожи на старые фоновые страницы, но имеют менее привилегированную поверхность API. В недавних обсуждениях на доске WebManifest Google, похоже, очень полон решимости опубликовать это в том виде, в каком он был предложен, и не будет открыт для обсуждения использования других решений.

Тем временем разработчики Firefox предлагают ограниченное событие в качестве компромисса, в то время как лучшие решения обсуждаются для возможного Manifest v4.

Будут ли оба решения в конечном итоге поддерживаться на обеих платформах, объединены в одну функцию или приведут к большему расколу между API в браузерах, можно будет увидеть в ближайшие месяцы.

Выводы

Таким образом, Manifest v3 все еще находится в стадии разработки, поскольку он не поддерживается ни одним из крупных браузеров и еще не дает полной замены удаленным фоновым страницам.

Несмотря на то, что стандарты расширений развиваются для более современного мобильного Интернета, это здорово, когда приходится наблюдать за конкурирующими предложениями и отсутствием функций всего за полгода до того, как Google сжимает крайний срок для уничтожения Manifest v2, это тревожит.