Պրոքսի պրոֆիլների փոխարկումը պետք է փոխի ընտրված հաշիվը, ոչ թե ավելացնի ևս մեկ onAuthRequired լսող։ Հակառակ դեպքում հին փակումները կարող են շարունակել պատասխանել նախորդ ընտրության հաշվով։

Գրանցեք մեկ անվանված լսող ծառայության աշխատակցի վերին մակարդակում։ Իրադարձություն գալիս կարդացեք ընթացիկ հաշիվը՝

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-ի լուծումից հետո ստեղծում է արթնացման բացվածք։

Ավելացրեք մերժման սահմանաչափ թողարկելուց առաջ

Հատվածը ցույց է տալիս գրանցումը և հաշվի ընտրությունը։ Յուրաքանչյուր հարցման համար ավելացրեք սահմանափակ կրկնափորձի գրառում, որպեսզի մերժված գաղտնաբառը անվերջ չուղարկվի։ Մաքրեք այդ գրառումը ավարտին կամ ձախողմանը։ Աշխատակցի գլոբալները կարող են անհետանալ, երբ աշխատակիցը կանգ է առնում, ուստի արթնացումների միջև անհրաժեշտ վիճակը պահեք ընդլայնման համապատասխան պահոցային տարածքում։

storage.session-ը գոյատևում է աշխատակցի վերագործարկումներից զննարկիչի սեսիայի ընթացքում․ այն մշտական հաշվի պահոց չէ զննարկիչի վերագործարկումների միջև։ Սահմանեք, թե ինչ է անում ընդլայնումը, երբ ընտրված հաշիվ հասանելի չէ։

isProxy և challenger ստուգումները թույլ չեն տալիս անկապ կայքի մարտահրավերին ստանալ այս հաշիվը։ Եթե զննարկիչը երբեք չի ուղարկում իրադարձությունը, միայն լսողի մաքրումը չի կարող առաջացնել այն․ առանձին ստուգեք փաստացի հարցումը, թույլտվությունները և զննարկիչի վարքը։

Առնչվող հոդվածներ