A proxyprofilok váltásának a kiválasztott fiókot kell átváltania, nem pedig újabb onAuthRequired figyelőt hozzáadnia. Különben a régi closures továbbra is a korábbi kiválasztás fiókjával válaszolhatnak.

Regisztráljon egyetlen elnevezett figyelőt a service worker legfelső szintjén. Olvassa ki az aktuális fiókot, amikor esemény érkezik:

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

Ez a részlet feltételezi, hogy a kiterjesztés már a selectedProxy alatt tárolja a kiválasztott HTTP-proxyt, numerikus porttal és a szándékolt fiókkal. A manifestnek webRequest, webRequestAuthProvider, storage és a szükséges gazdagép-engedélyek kellenek. Magának a proxy kiválasztásának is kell a proxy engedély.

A regisztráció szinkron módon történik. A tároló az esemény visszahívásában olvasódik, miután a Chrome-nak van telepített figyelője, amelyhez továbbíthat. Ha csak egy kezdeti storage-promise feloldása után regisztrál, az ébresztési rést hoz létre.

Adjon hozzá elutasítási korlátot kiadás előtt

A részlet a regisztrációt és a fiókválasztást mutatja. Adjon hozzá korlátozott újrapróbálkozási rekordot minden kéréshez, hogy egy elutasított jelszó ne legyen végtelenül elküldve. A rekordot fejezze be vagy törölje hiba esetén. A worker globális változói eltűnhetnek, amikor a worker leáll, ezért az ébresztések között szükséges állapotot a kiterjesztés megfelelő tárolóterületén tartsa.

A storage.session túléli a worker újraindításait a böngésző munkamenetén belül; nem állandó fióktároló a böngésző újraindításai között. Határozza meg, mit tesz a kiterjesztés, ha nincs kiválasztott fiók.

Az isProxy és challenger ellenőrzések megakadályozzák, hogy egy nem kapcsolódó webhely kihívása megkapja ezt a fiókot. Ha a böngésző soha nem küldi el az eseményt, a figyelő tisztítása önmagában nem tudja előidézni: vizsgálja külön a tényleges kérést, az engedélyeket és a böngésző viselkedését.

Kapcsolódó cikkek