WebExtensions
WebExtensions — это кроссплатформенная система разработки браузерных расширений, основанная на веб-технологиях (HTML, CSS, JavaScript) и едином наборе API (Application Programming Interface). Она была разработана Mozilla для браузера Firefox и впоследствии принята в качестве стандарта для большинства современных браузеров, включая Google Chrome, Microsoft Edge, Opera и Brave. Основная цель WebExtensions — обеспечить совместимость расширений между различными браузерами при минимальных изменениях в коде, а также повысить безопасность и стабильность работы браузера за счёт изоляции расширений от его ядра.
История
Предпосылки создания
До появления WebExtensions каждый крупный браузер использовал собственную, часто несовместимую с другими, архитектуру расширений. В Firefox до версии 57 (2017 год) использовалась система XUL (XML User Interface Language) и XPCOM (Cross Platform Component Object Model), которые позволяли расширениям глубоко интегрироваться в интерфейс и внутренние механизмы браузера. Это давало разработчикам огромные возможности, но приводило к частым сбоям, уязвимостям и проблемам с производительностью. Расширения могли напрямую изменять код браузера, что делало их нестабильными при обновлениях Firefox. В Google Chrome с момента его запуска в 2008 году использовалась более ограниченная, но безопасная модель на основе манифеста (Manifest V2), где расширения работали в изолированном процессе и имели доступ только к строго определённым API.
Разработка и внедрение
В середине 2010-х годов Mozilla приняла стратегическое решение отказаться от XUL/XPCOM в пользу более современной и безопасной архитектуры, совместимой с Chrome. Проект получил название WebExtensions. Разработка велась в тесном сотрудничестве с сообществом и другими производителями браузеров. В 2015 году Mozilla выпустила первую экспериментальную версию WebExtensions для Firefox Developer Edition. Полный переход на новую систему произошёл с выходом Firefox 57 (Quantum) в ноябре 2017 года. Этот релиз, получивший название «Firefox Quantum», одновременно с внедрением нового движка CSS (Stylo) и многопроцессной архитектуры, полностью отключил поддержку старых XUL-расширений. Миграция на WebExtensions вызвала неоднозначную реакцию в сообществе: многие популярные расширения, такие как Classic Theme Restorer и DownThemAll!, потеряли часть функциональности или были заброшены разработчиками, не готовыми переписывать код.
Эволюция и стандартизация
После внедрения WebExtensions Mozilla сосредоточилась на расширении API, чтобы восполнить потерю возможностей, утраченных при отказе от XUL. В 2018—2020 годах были добавлены API для работы с боковыми панелями, devtools, вкладками и контекстными меню. Параллельно Google развивал собственную систему расширений для Chrome, которая также базировалась на WebExtensions, но с некоторыми отличиями. В 2019 году началась работа над стандартизацией WebExtensions через W3C (World Wide Web Consortium), что привело к созданию черновика спецификации «Browser Extensions». В 2022 году Google анонсировал переход на Manifest V3 — новую версию манифеста для расширений Chrome, которая вносит значительные ограничения по сравнению с Manifest V2, особенно в части блокировки сетевых запросов (webRequest API). Это вызвало критику со стороны разработчиков блокировщиков рекламы и конфиденциальности, которые заявили, что Manifest V3 существенно снижает эффективность их продуктов. Mozilla, в свою очередь, заявила о поддержке Manifest V3, но с сохранением ключевых возможностей Manifest V2, включая полноценный webRequest API.
Архитектура и принципы работы
Основные компоненты
Расширение WebExtensions представляет собой архив (обычно с расширением .xpi для Firefox или .crx для Chrome), содержащий следующие обязательные и опциональные файлы:
- Манифест (manifest.json) — основной файл конфигурации, описывающий расширение: его название, версию, иконки, разрешения, скрипты и фоновые страницы. Версия манифеста (Manifest V2 или V3) определяет набор доступных API и ограничений.
- Фоновые скрипты (background scripts) — JavaScript-код, который выполняется постоянно в фоновом процессе браузера. В Manifest V2 это единый скрипт, в Manifest V3 — сервис-воркеры (service workers), которые могут быть приостановлены для экономии ресурсов.
- Контентные скрипты (content scripts) — JavaScript-код, который внедряется в веб-страницы, открытые пользователем. Они имеют доступ к DOM (Document Object Model) страницы, но не к глобальным переменным страницы или к API расширения напрямую. Взаимодействие с фоновыми скриптами осуществляется через обмен сообщениями.
- Всплывающие окна (popup) — HTML-страницы, которые отображаются при клике на иконку расширения на панели инструментов.
- Страницы настроек (options page) — HTML-страница для настройки параметров расширения.
- Ресурсы — изображения, CSS-файлы, локализованные строки (i18n) и другие статические файлы.
Модель безопасности
WebExtensions реализует модель безопасности на основе принципа наименьших привилегий. Расширение запрашивает разрешения (permissions) на доступ к определённым данным или функциям браузера (например, «доступ к данным на всех сайтах», «доступ к вкладкам», «доступ к закладкам»). Пользователь явно предоставляет эти разрешения при установке. Расширение не может получить доступ к данным, на которые не было получено разрешение. Кроме того, все скрипты расширения выполняются в изолированных контекстах (sandbox), что предотвращает их влияние на другие расширения или на ядро браузера. В Manifest V3 введены дополнительные ограничения: удалённый код (код, загружаемый с внешних серверов) запрещён, а все скрипты должны быть включены в пакет расширения.
API и возможности
WebExtensions предоставляет широкий набор API для взаимодействия с браузером и веб-страницами. Основные группы API включают:
- tabs — управление вкладками (создание, закрытие, обновление, перемещение, получение информации о вкладке).
- windows — управление окнами браузера (создание, изменение размеров, позиционирование).
- storage — хранение данных расширения (локальное, синхронизируемое через облако, временное).
- webRequest — перехват и модификация сетевых запросов (в Manifest V2 — полный доступ, в Manifest V3 — ограниченный режим declarativeNetRequest).
- cookies — управление файлами cookie.
- bookmarks — работа с закладками.
- history — доступ к истории просмотров.
- downloads — управление загрузками файлов.
- commands — определение горячих клавиш для действий расширения.
- contextMenus — добавление пунктов в контекстное меню браузера.
- notifications — отображение системных уведомлений.
- browserAction (Chrome) / action (Manifest V3) — управление иконкой и всплывающим окном на панели инструментов.
- sidebars — управление боковыми панелями (поддерживается в Firefox и некоторых других браузерах).
- devtools — интеграция с инструментами разработчика.
Сравнение с другими системами расширений
WebExtensions vs XUL/XPCOM (Firefox)
Главное отличие WebExtensions от XUL/XPCOM — уровень доступа к браузеру. XUL позволял расширениям напрямую модифицировать интерфейс браузера, добавлять новые элементы меню, панели инструментов, переопределять стандартные диалоги. Это давало практически неограниченные возможности, но делало расширения хрупкими: любое обновление Firefox могло сломать их. WebExtensions, напротив, предоставляет доступ только через строго определённые API, что значительно повышает стабильность и безопасность, но ограничивает функциональность. Например, в WebExtensions невозможно создать расширение, которое полностью заменяет интерфейс браузера (как это делали темы полной перерисовки в XUL).
WebExtensions vs NPAPI (Netscape Plugin API)
NPAPI использовался в старых версиях браузеров (включая Firefox и Chrome) для плагинов, таких как Adobe Flash и Java. NPAPI-плагины выполнялись вне браузера и имели прямой доступ к операционной системе, что создавало серьёзные риски безопасности. WebExtensions, напротив, работает в изолированном окружении и не имеет прямого доступа к системным ресурсам. NPAPI был полностью отключён в большинстве браузеров к 2017 году.
WebExtensions vs Safari App Extensions (Safari)
Расширения для Safari до версии 12 (2018 год) использовали собственную систему на основе JavaScript и Objective-C. С выходом Safari 12 Apple перешла на систему, совместимую с WebExtensions, но с некоторыми ограничениями: например, Safari не поддерживает API для работы с боковыми панелями и имеет более строгие требования к подписи расширений. Разработчики могут конвертировать расширения, созданные для Chrome или Firefox, в формат Safari с помощью специального инструмента Xcode.
Разработка и распространение
Инструменты разработки
Для создания расширений WebExtensions используются стандартные веб-инструменты: любой текстовый редактор (VS Code, Sublime Text, Atom) и браузер с включённым режимом разработчика. В Firefox и Chrome предусмотрены специальные страницы для отладки расширений (about:debugging в Firefox, chrome://extensions в Chrome). Mozilla предоставляет инструмент web-ext, который автоматизирует запуск, тестирование и упаковку расширений. Для отладки контентных скриптов можно использовать встроенные инструменты разработчика браузера (F12).
Публикация
Расширения WebExtensions распространяются через официальные магазины дополнений:
- Mozilla Add-ons (addons.mozilla.org, AMO) — для Firefox. Расширения проходят автоматическую проверку на наличие вредоносного кода и нарушение политик. Разработчики могут публиковать расширения бесплатно.
- Chrome Web Store — для Google Chrome. Требуется регистрация разработчика (однократный взнос в размере 5 долларов США). Расширения проходят автоматическую и ручную проверку.
- Microsoft Edge Add-ons — для Microsoft Edge (на основе Chromium). Процесс аналогичен Chrome Web Store.
- Opera Addons — для Opera.
Также возможна установка расширений вручную (режим разработчика) или через корпоративные политики.
Критика и ограничения
Ограничения Manifest V3
Переход на Manifest V3 в Chrome вызвал значительную критику, особенно со стороны разработчиков блокировщиков рекламы (например, uBlock Origin). Ключевое изменение — замена полноценного webRequest API на declarativeNetRequest, который позволяет блокировать запросы только на основе статического набора правил, загружаемого при установке расширения. Это ограничивает возможности динамической фильтрации, которая необходима для эффективной борьбы с новыми типами рекламы и трекеров. Разработчики утверждают, что Manifest V3 снижает эффективность блокировщиков на 90% и более. Mozilla, в отличие от Google, заявила о сохранении webRequest API в Firefox даже в Manifest V3, что делает Firefox более привлекательным для пользователей, заботящихся о конфиденциальности.
Потеря функциональности при миграции с XUL
Многие пользователи Firefox старших версий (до 57) критиковали WebExtensions за потерю возможностей, которые были доступны в XUL-расширениях. Например, расширения для управления вкладками (Tab Mix Plus) не могли полностью воспроизвести свою функциональность из-за ограничений API. Некоторые разработчики отказались от поддержки своих расширений, что привело к уходу части пользователей на другие браузеры (например, Pale Moon, который продолжает поддерживать XUL).
Фрагментация API
Несмотря на усилия по стандартизации, между реализациями WebExtensions в разных браузерах сохраняются различия. Например, API для боковых панелей (sidebarAction) поддерживается в Firefox, но не в Chrome. API для работы с закладками (bookmarks) имеет разные типы объектов в разных браузерах. Разработчикам приходится использовать полифиллы (например, webextension-polyfill от Mozilla) или писать условный код для обеспечения совместимости.
Интересные факты
- Первое расширение, созданное с использованием WebExtensions для Firefox, было выпущено в 2015 году и называлось «Firefox Test Pilot».
- По данным Mozilla, на момент выхода Firefox 57 в 2017 году в каталоге AMO было более 20 000 расширений, совместимых с WebExtensions.
- Расширения WebExtensions не могут получить доступ к файловой системе пользователя напрямую — только через API загрузок или через специальные разрешения (например,
nativeMessagingдля взаимодействия с нативными приложениями). - В 2023 году Google объявил, что планирует полностью отключить поддержку Manifest V2 в Chrome в начале 2024 года, но позже перенёс сроки на 2025 год из-за протестов сообщества.
Источники
- Mozilla Developer Network (MDN) — WebExtensions documentation.
- Google Chrome Developers — Extensions documentation.
- W3C Browser Extensions Community Group — Draft specification.
- Статья «The Future of Firefox Extensions» на блоге Mozilla (2015).
- Статья «Manifest V3: What It Means for Ad Blockers» на сайте EFF (Electronic Frontier Foundation).
- Обсуждения на форумах Mozilla и Reddit (r/firefox, r/chrome).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →