Prebacivanje proxy profila treba promijeniti odabrani račun, a ne dodati još jedan onAuthRequired slušatelj. Inače stare closures mogu nastaviti odgovarati računom iz prethodnog odabira.

Registrirajte jedan imenovani slušatelj na najvišoj razini service workera. Čitajte trenutni račun kada događaj stigne:

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'],
);

Ovaj isječak pretpostavlja da proširenje već pohranjuje odabrani HTTP proxy pod selectedProxy, s numeričkim portom i namijenjenim računom. Manifest treba webRequest, webRequestAuthProvider, storage i potrebna dopuštenja za host. I sam odabir proxyja treba dopuštenje proxy.

Registracija se događa sinkrono. Pohrana se čita unutar povratnog poziva, nakon što Chrome ima instaliran slušatelj kojem dostavlja. Registriranje tek nakon što se početni storage promise razriješi stvara prazninu pri buđenju.

Dodajte ograničenje odbijanja prije objave

Isječak prikazuje registraciju i odabir računa. Dodajte ograničeni zapis ponovnih pokušaja za svaki zahtjev kako se odbijena lozinka ne bi slala neograničeno. Očistite taj zapis po završetku ili neuspjehu. Globalne varijable workera mogu nestati kada se worker zaustavi, zato čuvajte stanje potrebno između buđenja u odgovarajućem području pohrane proširenja.

storage.session preživljava ponovna pokretanja workera unutar sesije preglednika; nije trajna pohrana računa između ponovnih pokretanja preglednika. Definirajte što proširenje čini kada nema odabranog računa.

Provjere isProxy i challenger sprječavaju da izazov nepovezanog web mjesta primi ovaj račun. Ako preglednik nikada ne pošalje događaj, samo čišćenje slušatelja ne može ga proizvesti: pregledajte stvarni zahtjev, dopuštenja i ponašanje preglednika odvojeno.

Povezani članci