Пребацивање proxy профила треба да промени изабрани налог, а не да дода још један 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 proxy под selectedProxy, са нумеричким портом и намењеним налогом. Манифест захтева webRequest, webRequestAuthProvider, storage и потребне дозволе за домаћина. И сам избор proxy-ја захтева дозволу proxy.

Регистрација се дешава синхроно. Складиште се чита у повратном позиву, након што Chrome има инсталиран слушач коме доставља. Регистровање тек након што се почетни storage promise реши ствара празнину при буђењу.

Додајте ограничење одбијања пре објављивања

Исечак приказује регистрацију и избор налога. Додајте ограничен запис поновног покушаја за сваки захтев како се одбијена лозинка не би слала неограничено. Очистите тај запис по завршетку или неуспеху. Глобалне променљиве worker-а могу нестати када се worker заустави, зато чувајте стање потребно између буђења у одговарајућем подручју складишта проширења.

storage.session преживљава поновна покретања worker-а у оквиру сесије прегледача; то није трајно складиште налога између поновних покретања прегледача. Дефинишите шта проширење чини када нема изабраног налога.

Провере isProxy и challenger спречавају да изазов неповезаног веб-сајта добије овај налог. Ако прегледач никада не достави догађај, само чишћење слушача не може га створити: прегледајте стварни захтев, дозволе и понашање прегледача одвојено.

Повезани чланци