Ang paglipat ng mga proxy profile ay dapat magpalit ng napiling account, hindi magdagdag ng isa pang onAuthRequired listener. Kung hindi, maaaring magpatuloy ang mga lumang closure sa pagsagot gamit ang account mula sa naunang pagpili.

Magrehistro ng isang pinangalanang listener sa pinakamataas na antas ng service worker. Basahin ang kasalukuyang account kapag may event na dumating:

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

Ipinapalagay ng snippet na ito na nakaimbak na ng extension ang napiling HTTP proxy sa ilalim ng selectedProxy, na may numeric na port at ang nilalayong account. Kailangan ng manifest ang webRequest, webRequestAuthProvider, storage at ang mga kinakailangang host permission. Kailangan din ng proxy selection mismo ng proxy permission.

Sabay na nangyayari ang pagpaparehistro. Binabasa ang storage sa loob ng callback, pagkatapos magkaroon ang Chrome ng naka-install na listener na padadalhan. Ang magrehistro lamang pagkatapos maresolba ang paunang storage promise ay lumilikha ng agwat sa paggising.

Magdagdag ng limitasyon sa pagtanggi bago ilabas

Ipinapakita ng snippet ang pagpaparehistro at pagpili ng account. Magdagdag ng limitadong talaan ng muling pagtatangka para sa bawat kahilingan upang ang tinanggihang password ay hindi maipasa nang walang hanggan. Linisin ang talaang iyon kapag natapos o nabigo. Maaaring mawala ang mga global ng worker kapag huminto ang worker, kaya itago ang estadong kailangan sa pagitan ng mga paggising sa angkop na storage area ng extension.

Ang storage.session ay nakakaligtas sa mga restart ng worker sa loob ng session ng browser; hindi ito permanenteng imbakan ng account sa pagitan ng mga restart ng browser. Tukuyin kung ano ang ginagawa ng extension kapag walang napiling account na available.

Pinipigilan ng mga pagsusuri ng isProxy at challenger na makatanggap ng account na ito ang isang hamon mula sa walang kaugnayang website. Kung hindi kailanman ipinapadala ng browser ang event, hindi ito malilikha ng paglilinis ng listener lamang: suriin nang hiwalay ang aktwal na kahilingan, mga permission at pag-uugali ng browser.

Kaugnay na mga artikulo