პროქსის პროფილების გადართვამ უნდა შეცვალოს არჩეული ანგარიში და არა დაამატოს კიდევ ერთი 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-ის ქვეშ, რიცხვითი პორტით და განზრახული ანგარიშით. Manifest-ს სჭირდება webRequest, webRequestAuthProvider, storage და საჭირო ჰოსტის ნებართვები. თავად პროქსის არჩევანსაც სჭირდება proxy ნებართვა.

რეგისტრაცია ხდება სინქრონულად. საცავი იკითხება უკუძახილში, მას შემდეგ რაც Chrome-ს აქვს დაყენებული მსმენელი გასაგზავნად. რეგისტრაცია მხოლოდ საწყისი storage promise-ის გადაწყვეტის შემდეგ ქმნის გაღვიძების უფსკრულს.

დაამატეთ უარის ლიმიტი გამოქვეყნებამდე

ფრაგმენტი აჩვენებს რეგისტრაციას და ანგარიშის არჩევანს. დაამატეთ შეზღუდული განმეორებითი ცდის ჩანაწერი თითოეული მოთხოვნისთვის, რათა უარყოფილი პაროლი უსასრულოდ არ გაიგზავნოს. გაასუფთავეთ ეს ჩანაწერი დასრულების ან წარუმატებლობისას. მუშაკის გლობალები შეიძლება გაქრეს მუშაკის გაჩერებისას, ამიტომ გაღვიძებებს შორის საჭირო მდგომარეობა შეინახეთ გაფართოების შესაბამის საცავ არეალში.

storage.session გადაურჩება მუშაკის გადატვირთვებს ბრაუზერის სესიის განმავლობაში; ეს არ არის მუდმივი ანგარიშის საცავი ბრაუზერის გადატვირთვებს შორის. განსაზღვრეთ რას აკეთებს გაფართოება, როცა არჩეული ანგარიში მიუწვდომელია.

isProxy და challenger შემოწმებები ხელს უშლიან დაუკავშირებელი ვებსაიტის გამოწვევას მიიღოს ეს ანგარიში. თუ ბრაუზერი არასდროს აგზავნის მოვლენას, მხოლოდ მსმენელის გასუფთავება ვერ შექმნის მას: ცალკე შეამოწმეთ ფაქტობრივი მოთხოვნა, ნებართვები და ბრაუზერის ქცევა.

დაკავშირებული სტატიები