Einen einzigen Chrome-MV3-Proxy-Auth-Listener für den Profilwechsel registrieren
Den Authentifizierungs-Listener von Manifest V3 synchron registrieren und das aktuelle Proxy-Konto im Event-Callback lesen.
Ein Wechsel des Proxy-Profils sollte das ausgewählte Konto ändern und nicht einen weiteren onAuthRequired-Listener hinzufügen. Sonst können alte Closures weiterhin mit dem Konto aus einer früheren Auswahl antworten.
Registriere einen einzigen benannten Listener auf der obersten Ebene des Service Workers. Lies das aktuelle Konto, wenn ein Ereignis eintrifft:
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'],
);Dieses Fragment setzt voraus, dass die Erweiterung den ausgewählten HTTP-Proxy bereits unter selectedProxy speichert, mit einem numerischen Port und dem vorgesehenen Konto. Das Manifest benötigt webRequest, webRequestAuthProvider, storage und die erforderlichen Host-Berechtigungen. Auch die Proxy-Auswahl selbst benötigt die proxy-Berechtigung.
Die Registrierung erfolgt synchron. Der Speicher wird im Callback gelesen, nachdem Chrome einen installierten Listener zum Zustellen hat. Erst nach dem Auflösen eines anfänglichen Storage-Promises zu registrieren, erzeugt eine Lücke beim Aufwachen.
Ein Ablehnungslimit vor der Veröffentlichung hinzufügen
Das Fragment zeigt Registrierung und Kontenauswahl. Füge pro Anfrage einen begrenzten Wiederholungsdatensatz hinzu, damit ein abgelehntes Passwort nicht endlos übermittelt wird. Bereinige diesen Datensatz bei Abschluss oder Fehler. Globale Variablen des Workers können verschwinden, wenn der Worker stoppt; halte den über Wachzyklen benötigten Zustand in einem geeigneten Speicherbereich der Erweiterung.
storage.session überlebt Worker-Neustarts innerhalb der Browsersitzung; es ist kein dauerhafter Kontospeicher über Browser-Neustarts hinweg. Definiere, was die Erweiterung tut, wenn kein ausgewähltes Konto verfügbar ist.
Die Prüfungen von isProxy und challenger verhindern, dass eine unabhängige Website-Challenge dieses Konto erhält. Wenn der Browser das Ereignis nie zustellt, kann die Listener-Bereinigung allein es nicht erzeugen: Untersuche die tatsächliche Anfrage, Berechtigungen und Browserverhalten getrennt.