Архитектура WebExtension: Manifest V3 и несколько браузеров | ShopTools AI
Гид ShopTools

Архитектура WebExtension: Manifest V3 и несколько браузеров

Учебная схема разделения manifest, фонового слоя, popup и content script с отдельной проверкой состояния, API и платформенных сборок.

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

Поиск ShopTools AI: магазин или покупка и страна покупки
Поиск на сайте ShopTools AI, 14 сентября 2026 года. Это интерфейс подбора предложений, а не подтверждение скидки в корзине.

Ниже приведена референсная архитектура на основе исходных разборов проекта. Это не описание всех модулей текущего релиза и не подтверждение совместимости одной сборки со всеми браузерами. Платформенные возможности проверяйте отдельно.

Разделите четыре ответственности

Состояние должно пережить остановку контекста

Для MV3 проектируйте фоновые обработчики так, чтобы они могли продолжить работу после остановки worker. Переменные процесса используйте как ускорение, а нужные после перезапуска данные сохраняйте с версией схемы и сроком актуальности.

У кэша разделите свежесть ответа и допустимость устаревшего резерва. Объединяйте одинаковые запросы через single flight. Быстрое чтение старой копии не делает истёкший купон актуальным: данные всё равно проходят предметные фильтры.

Сопоставляйте магазин по целевому домену, а не адресу трекера. Для сохранённых операций проверяйте контекст вкладки и магазина. При недостаточных данных завершайте запрос объяснимым отказом, а не оставляйте бесконечное ожидание.

Общее ядро не равно одному архиву

В общем ядре можно держать правила сопоставления, сравнение сумм и схему сообщений. Различия browser API изолируйте в тонких адаптерах. Обёртка должна завершать операцию один раз независимо от callback или Promise-интерфейса.

Проверяйте наличие возможности, а не только название браузера. Ошибку API не маскируйте пустым успешным ответом. Фоновый жизненный цикл, разрешения и упаковку нужно тестировать для каждой целевой платформы.

Для Safari отдельно учитывайте приложение-контейнер и расширение. Установка контейнера, включение расширения и доступ к сайту являются разными этапами. Это не подтверждение, что соответствующие пакеты уже опубликованы.

Собирайте проверяемую матрицу релиза

  1. Зафиксируйте исходную ревизию, версию общего кода, платформенный manifest и идентификаторы. Для приложения отдельно учитывайте номер сборки.
  2. Проверьте обновление с предыдущего пакета: настройки должны мигрировать по явному правилу, а неизвестный формат данных завершаться безопасно.
  3. Для каждой платформы воспроизведите открытие popup, чтение магазина, сетевой отказ, восстановление после reload и отказ в доступе к странице.
  4. Проверьте длинные локализованные подписи и сценарий без необязательной телеметрии. Результат теста одной платформы не переносите на другую.

Серверные данные не должны становиться кодом

В референсном проекте держите исполняемую логику внутри пакета. Удалённую конфигурацию ограничивайте проверяемыми данными с локальными пределами. Не исполняйте строки через eval и не загружайте скрипт ради исправления магазина.

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

Материал редакции ShopTools AI.

Некоторые переходы в ShopTools партнёрские. За подтверждённую покупку сервис может получить комиссию; сам переход не гарантирует начисление.

Подготовлено с помощью ИИ. Описание функций сверено с кодом и интерфейсом ShopTools; это не отчёт о проверке каждого магазина.