Prebacivanje proxy profila treba promijeniti odabrani račun, a ne dodati još jedan onAuthRequired listener. U suprotnom stare closures mogu nastaviti odgovarati računom iz prethodnog odabira.

Registrirajte jedan imenovani listener 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ć čuva odabrani HTTP proxy pod selectedProxy, s numeričkim portom i namijenjenim računom. Manifest treba webRequest, webRequestAuthProvider, storage i potrebne dozvole za host. I sam odabir proxyja treba dozvolu proxy.

Registracija se događa sinhrono. Pohrana se čita unutar povratnog poziva, nakon što Chrome ima instaliran listener kojem dostavlja. Registriranje tek nakon što se početni storage promise riješ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 šta proširenje radi kada nema odabranog računa.

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

Povezani članci