Регистрируйте onStartup и onInstalled синхронно на верхнем уровне service worker Manifest V3, когда эти события должны применить выбранный прокси. Для расширения, намеренно закреплённого за одним маршрутом:

function applyProxy() {
  chrome.proxy.settings.set({
    value: {
      mode: 'fixed_servers',
      rules: {
        singleProxy: {
          scheme: 'http',
          host: 'proxy.example',
          port: 8080,
        },
      },
    },
    scope: 'regular',
  }, () => {
    if (chrome.runtime.lastError) {
      console.error(chrome.runtime.lastError.message);
    }
  });
}

chrome.runtime.onStartup.addListener(applyProxy);
chrome.runtime.onInstalled.addListener(applyProxy);

manifest должен объявить разрешение на прокси и назвать этот фоновый worker. Для разрешённого маршрута публичного просмотра без аутентификации прокси замените конечную точку кандидатом из списка HTTP-прокси, оставив порт целым числом.

onStartup — это запуск профиля при установленном расширении. onInstalled включает и обновления, в том числе перезагрузку распакованного расширения, которая считается обновлением. Событие создания окна описывает каждое окно и может срабатывать многократно в рамках одной сессии.

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

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

Похожие статьи