Registreu un únic oient d'autenticació de proxy de Chrome MV3 per canviar de perfil
Registreu l'oient d'autenticació de Manifest V3 de manera sincrònica i llegiu el compte de proxy actual dins la devolució de trucada de l'esdeveniment.
Canviar de perfil de proxy hauria de canviar el compte seleccionat, no afegir un altre oient onAuthRequired. Si no, els closures antics poden continuar responent amb el compte d'una selecció anterior.
Registreu un únic oient amb nom al nivell superior del service worker. Llegiu el compte actual quan arribi un esdeveniment:
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'],
);Aquest fragment assumeix que l'extensió ja desa el proxy HTTP seleccionat sota selectedProxy, amb un port numèric i el compte previst. El manifest necessita webRequest, webRequestAuthProvider, storage i els permisos d'amfitrió necessaris. La selecció de proxy també necessita el permís proxy.
El registre passa de manera sincrònica. L'emmagatzematge es llegeix dins la devolució de trucada, després que Chrome tingui un oient instal·lat al qual enviar. Registrar només després que es resolgui una promesa d'emmagatzematge inicial crea un buit de despertada.
Afegiu un límit de rebuig abans de publicar
El fragment mostra el registre i la selecció de compte. Afegiu un registre de reintents limitat per a cada sol·licitud perquè una contrasenya rebutjada no s'enviï indefinidament. Netegeu aquest registre en completar-se o fallar. Les globals del worker poden desaparèixer quan el worker s'atura, així que conserveu l'estat necessari entre despertades en una àrea d'emmagatzematge adequada de l'extensió.
storage.session sobreviu als reinicis del worker dins la sessió del navegador; no és un emmagatzematge permanent del compte entre reinicis del navegador. Definiu què fa l'extensió quan no hi ha cap compte seleccionat disponible.
Les comprovacions isProxy i challenger eviten que un repte d'un lloc web no relacionat rebi aquest compte. Si el navegador mai envia l'esdeveniment, la neteja de l'oient per si sola no pot produir-lo: inspeccioneu la sol·licitud real, els permisos i el comportament del navegador per separat.