Короткий ответ

WebExtensions API, manifest differences, conditional build, testing and store publication. Разбираем практический порядок работ, риски, стоимость и то, как принять результат без новых проблем.

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

Что обычно переиспользуется

ЧастьChrome/EdgeFirefox
WebExtensions APIsмного общегомного общего
Content scriptsобычно общий кодобычно общий код
Manifestнужны различиянужны различия
Namespacechromebrowser/chrome compatibility
Store packageотдельныйотдельный
Некоторые APIsChromium-specificаналоги/ограничения

Минимальный wrapper API

JAVASCRIPT
const api = globalThis.browser ?? globalThis.chrome;

api.runtime.onMessage.addListener((message) => {
  console.log(message);
});

Один repository — не обязательно один manifest

Практичнее держать общий src и отдельные build-конфиги/manifest overrides. Так browser-specific permissions и API не превращаются в условные конструкции по всему коду.

Тестировать отдельно

СценарийChromeEdgeFirefox
Install/update✓✓✓
Permissions prompt✓✓✓
Content script✓✓✓
Storage✓✓✓
Auth/API✓✓✓
Store packageотдельная проверкаотдельнаяотдельная

Как проверить результат

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

Связанные материалы