ການສະຫຼັບໂປຣໄຟລ໌ proxy ຄວນປ່ຽນບັນຊີທີ່ເລືອກ ບໍ່ແມ່ນເພີ່ມຕົວຮັບຟັງ 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'],
);

ສ່ວນນີ້ສົມມຸດວ່າສ່ວນຂະຫຍາຍເກັບ proxy HTTP ທີ່ເລືອກໄວ້ແລ້ວພາຍໃຕ້ selectedProxy ດ້ວຍພອດເປັນຕົວເລກ ແລະ ບັນຊີທີ່ຕັ້ງໃຈໄວ້. Manifest ຕ້ອງການ webRequest, webRequestAuthProvider, storage ແລະ ການອະນຸຍາດໂຮສທີ່ຈຳເປັນ. ການເລືອກ proxy ເອງກໍຕ້ອງການການອະນຸຍາດ proxy.

ການລົງທະບຽນເກີດຂຶ້ນແບບຊິງໂຄຣນັສ. ບ່ອນເກັບຖືກອ່ານພາຍໃນການເອີ້ນກັບ ຫຼັງຈາກ Chrome ມີຕົວຮັບຟັງທີ່ຕິດຕັ້ງແລ້ວເພື່ອສົ່ງໄປ. ການລົງທະບຽນພຽງແຕ່ຫຼັງຈາກ promise ຂອງບ່ອນເກັບເບື້ອງຕົ້ນແກ້ໄຂແລ້ວສ້າງຊ່ອງຫວ່າງການຕື່ນ.

ເພີ່ມຂີດຈຳກັດການປະຕິເສດກ່ອນປ່ອຍ

ສ່ວນນີ້ສະແດງການລົງທະບຽນ ແລະ ການເລືອກບັນຊີ. ເພີ່ມບັນທຶກການລອງໃໝ່ທີ່ມີຂີດຈຳກັດສຳລັບແຕ່ລະຄຳຮ້ອງ ເພື່ອບໍ່ໃຫ້ລະຫັດຜ່ານທີ່ຖືກປະຕິເສດຖືກສົ່ງຢ່າງບໍ່ມີທີ່ສິ້ນສຸດ. ລຶບບັນທຶກນັ້ນເມື່ອສຳເລັດ ຫຼື ລົ້ມເຫຼວ. Globals ຂອງ worker ອາດຫາຍໄປເມື່ອ worker ຢຸດ ດັ່ງນັ້ນເກັບສະຖານະທີ່ຕ້ອງການລະຫວ່າງການຕື່ນໄວ້ໃນພື້ນທີ່ເກັບຂອງສ່ວນຂະຫຍາຍທີ່ເໝາະສົມ.

storage.session ຢູ່ລອດການເລີ່ມ worker ໃໝ່ພາຍໃນເຊສຊັນຂອງບຣາວເຊີ; ມັນບໍ່ແມ່ນບ່ອນເກັບບັນຊີຖາວອນລະຫວ່າງການເລີ່ມບຣາວເຊີໃໝ່. ກຳນົດວ່າສ່ວນຂະຫຍາຍເຮັດຫຍັງເມື່ອບໍ່ມີບັນຊີທີ່ເລືອກ.

ການກວດສອບ isProxy ແລະ challenger ປ້ອງກັນບໍ່ໃຫ້ສິ່ງທ້າທາຍຈາກເວັບໄຊທີ່ບໍ່ກ່ຽວຂ້ອງໄດ້ຮັບບັນຊີນີ້. ຖ້າບຣາວເຊີບໍ່ເຄີຍສົ່ງເຫດການ ການລຶບຕົວຮັບຟັງພຽງຢ່າງດຽວບໍ່ສາມາດສ້າງມັນໄດ້: ກວດສອບຄຳຮ້ອງຕົວຈິງ ການອະນຸຍາດ ແລະ ພຶດຕິກຳຂອງບຣາວເຊີແຍກຕ່າງຫາກ.

ບົດຄວາມທີ່ກ່ຽວຂ້ອງ