Enregistrer un seul écouteur d'authentification proxy Chrome MV3 pour changer de profil
Enregistrez l'écouteur d'authentification Manifest V3 de façon synchrone et lisez le compte proxy courant dans le rappel de l'événement.
Changer de profil proxy devrait changer le compte sélectionné, pas ajouter un autre écouteur onAuthRequired. Sinon, d'anciennes fermetures peuvent continuer à répondre avec le compte d'une sélection précédente.
Enregistrez un seul écouteur nommé au niveau supérieur du service worker. Lisez le compte courant lorsqu'un événement arrive :
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'],
);Cet extrait suppose que l'extension stocke déjà le proxy HTTP sélectionné sous selectedProxy, avec un port numérique et son compte prévu. Le manifeste a besoin de webRequest, webRequestAuthProvider, storage et des autorisations d'hôte requises. La sélection du proxy elle-même a aussi besoin de l'autorisation proxy.
L'enregistrement se fait de façon synchrone. Le stockage est lu dans le rappel, après que Chrome dispose d'un écouteur installé auquel distribuer. S'enregistrer seulement après la résolution d'une promesse de stockage initiale crée une lacune de réveil.
Ajoutez une limite de rejet avant publication
L'extrait montre l'enregistrement et la sélection du compte. Ajoutez un enregistrement de nouvelles tentatives borné pour chaque requête afin qu'un mot de passe rejeté ne soit pas soumis indéfiniment. Nettoyez cet enregistrement à la fin ou en cas d'échec. Les globales du worker peuvent disparaître à l'arrêt du worker ; conservez donc l'état nécessaire entre les réveils dans une zone de stockage appropriée de l'extension.
storage.session survit aux redémarrages du worker pendant la session du navigateur ; ce n'est pas un stockage de compte permanent entre les redémarrages du navigateur. Définissez ce que fait l'extension lorsqu'aucun compte sélectionné n'est disponible.
Les contrôles isProxy et challenger empêchent le défi d'un site sans rapport de recevoir ce compte. Si le navigateur ne distribue jamais l'événement, le nettoyage de l'écouteur seul ne peut pas le produire : examinez la requête réelle, les autorisations et le comportement du navigateur séparément.