Rexistre un só oínte de autenticación de proxy de Chrome MV3 para cambiar de perfil
Rexistre o oínte de autenticación de Manifest V3 de forma sincrónica e lea a conta de proxy actual dentro da devolución de chamada do evento.
Cambiar de perfil de proxy debería cambiar a conta seleccionada, non engadir outro oínte onAuthRequired. Se non, os peches antigos poden seguir respondendo coa conta dunha selección anterior.
Rexistre un único oínte con nome no nivel superior do service worker. Lea a conta actual cando chega un evento:
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'],
);Este fragmento supón que a extensión xa garda o proxy HTTP seleccionado baixo selectedProxy, cun porto numérico e a súa conta prevista. O manifesto necesita webRequest, webRequestAuthProvider, storage e os permisos de host requiridos. A propia selección de proxy tamén necesita o permiso proxy.
O rexistro ocorre de forma sincrónica. O almacenamento lese dentro da devolución de chamada, despois de que Chrome teña un oínte instalado ao que enviar. Rexistrar só despois de que se resolva unha promesa de almacenamento inicial crea un oco de espertar.
Engada un límite de rexeitamento antes de publicar
O fragmento mostra o rexistro e a selección de conta. Engada un rexistro de reintentos limitado para cada solicitude, de xeito que un contrasinal rexeitado non se envíe indefinidamente. Limpe ese rexistro ao completarse ou fallar. As globais do worker poden desaparecer cando este se detén, así que garde o estado necesario entre espertadas nunha área de almacenamento axeitada da extensión.
storage.session sobrevive aos reinicios do worker dentro da sesión do navegador; non é un almacenamento permanente de contas entre reinicios do navegador. Defina que fai a extensión cando non hai ningunha conta seleccionada dispoñible.
As comprobacións isProxy e challenger impiden que un desafío dun sitio web non relacionado reciba esta conta. Se o navegador nunca envía o evento, a limpeza do oínte por si soa non pode producilo: inspeccione a solicitude real, os permisos e o comportamento do navegador por separado.