Регистрирајте еден Chrome MV3 слушач за прокси автентикација за промена на профил
Регистрирајте го слушачот за автентикација на Manifest V3 синхроно и читајте ја тековната прокси сметка во повратниот повик на настанот.
Менувањето на прокси профили треба да ја смени избраната сметка, а не да додаде уште еден 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 ветување создава празнина при будење.
Додајте ограничување за одбивање пред објавување
Фрагментот покажува регистрација и избор на сметка. Додајте ограничен запис за повторен обид за секое барање за да не се поднесува одбиена лозинка бесконечно. Исчистете го тој запис при завршување или неуспех. Глобалните променливи на worker можат да исчезнат кога workerот запира, затоа чувајте ја состојбата потребна помеѓу будења во соодветна област за складирање на екстензијата.
storage.session преживува рестартирања на worker во рамки на сесијата на прелистувачот; тоа не е трајно складиште на сметка помеѓу рестартирања на прелистувачот. Дефинирајте што прави екстензијата кога нема избрана сметка.
Проверките isProxy и challenger спречуваат предизвик од неповрзана веб-страница да ја добие оваа сметка. Ако прелистувачот никогаш не го достави настанот, само чистењето на слушачот не може да го создаде: проверете го вистинското барање, дозволите и однесувањето на прелистувачот одделно.