Прокси профильдерін ауыстыру таңдалған тіркелгіні өзгертуі керек, тағы бір 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 проксиді әлдеқашан selectedProxy астында, сандық портпен және ойластырылған тіркелгімен сақтайды деп болжайды. Манифестке webRequest, webRequestAuthProvider, storage және қажетті хост рұқсаттары керек. Прокси таңдауының өзіне де proxy рұқсаты қажет.

Тіркеу синхронды түрде жүреді. Сақтау орны кері шақырудың ішінде, Chrome-да жіберуге орнатылған тыңдаушы болғаннан кейін оқылады. Бастапқы storage promise шешілгеннен кейін ғана тіркеу ояну алшақтығын туғызады.

Шығару алдында бас тарту шегін қосыңыз

Фрагмент тіркеуді және тіркелгі таңдауын көрсетеді. Қабылданбаған құпиясөздің шексіз жіберілмеуі үшін әр сұрауға шектелген қайталау жазбасын қосыңыз. Аяқталғанда немесе сәтсіздікте сол жазбаны тазалаңыз. Жұмысшы тоқтағанда worker глобалдары жоғалуы мүмкін, сондықтан оянулар арасында қажет күйді кеңейтімнің қолайлы сақтау аймағында ұстаңыз.

storage.session браузер сессиясы ішінде жұмысшының қайта іске қосылуынан аман қалады; бұл браузер қайта іске қосылулары арасында тұрақты тіркелгі сақтау орны емес. Таңдалған тіркелгі қолжетімсіз болғанда кеңейтімнің не істейтінін анықтаңыз.

isProxy және challenger тексерулері байланыссыз веб-сайттың шақыруына бұл тіркелгінің берілуіне жол бермейді. Егер браузер оқиғаны ешқашан жібермесе, тек тыңдаушыны тазалау оны тудыра алмайды: нақты сұрауды, рұқсаттарды және браузер әрекетін бөлек тексеріңіз.

Қатысты мақалалар