Смяната на прокси профили трябва да сменя избрания акаунт, а не да добавя още един слушател onAuthRequired. Иначе старите closures могат да продължат да отговарят с акаунта от предишен избор.

Регистрирайте един именуван слушател на най-горното ниво на service worker. Четете текущия акаунт, когато пристигне събитие:

function answerProxyChallenge(details, reply) {
  if (!details.isProxy) {
    reply({});
    return;
  }
  chrome.storage.session.get('selectedProxy').then(({selectedProxy: p}) => {
    if (!p || details.challenger.host !== p.host ||
        details.challenger.port !== p.port) {
      reply({});
      return;
    }
    reply({authCredentials: {username: p.username, password: p.password}});
  }).catch(() => reply({cancel: true}));
}

chrome.webRequest.onAuthRequired.addListener(
  answerProxyChallenge,
  {urls: ['<all_urls>']},
  ['asyncBlocking'],
);

Този фрагмент предполага, че разширението вече съхранява избрания HTTP прокси под selectedProxy, с цифров порт и предназначения акаунт. Манифестът се нуждае от webRequest, webRequestAuthProvider, storage и необходимите разрешения за хост. Самият избор на прокси също се нуждае от разрешението proxy.

Регистрацията се извършва синхронно. Хранилището се чете в обратното извикване, след като Chrome има инсталиран слушател, на когото да доставя. Регистриране само след разрешаване на първоначален storage promise създава пропуск при събуждане.

Добавете ограничение за отхвърляния преди пускане

Фрагментът показва регистрация и избор на акаунт. Добавете ограничен запис за повторни опити за всяка заявка, за да не се подава отхвърлена парола безкрайно. Изчиствайте този запис при завършване или неуспех. Глобалните променливи на worker могат да изчезнат, когато worker спре, затова пазете състоянието, нужно между събужданията, в подходяща област за съхранение на разширението.

storage.session преживява рестартирания на worker в рамките на сесията на браузъра; не е постоянно хранилище на акаунт между рестартирания на браузъра. Определете какво прави разширението, когато няма избран акаунт.

Проверките isProxy и challenger пречат на предизвикателство от несвързан сайт да получи този акаунт. Ако браузърът никога не изпрати събитието, само почистването на слушателя не може да го създаде: проверявайте действителната заявка, разрешенията и поведението на браузъра поотделно.

Подобни статии