Καταχωρίστε έναν ακροατή ελέγχου ταυτότητας διαμεσολαβητή 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, με αριθμητική θύρα και τον προβλεπόμενο λογαριασμό. Το manifest χρειάζεται webRequest, webRequestAuthProvider, storage και τις απαιτούμενες άδειες κεντρικού υπολογιστή. Η ίδια η επιλογή διαμεσολαβητή χρειάζεται επίσης την άδεια proxy.
Η καταχώριση γίνεται συγχρονισμένα. Ο χώρος αποθήκευσης διαβάζεται μέσα στην επιστροφή κλήσης, αφού το Chrome έχει εγκατεστημένο ακροατή για αποστολή. Η καταχώριση μόνο αφού επιλυθεί μια αρχική υπόσχεση αποθήκευσης δημιουργεί κενό αφύπνισης.
Προσθέστε ένα όριο απόρριψης πριν τη δημοσίευση
Το απόσπασμα δείχνει καταχώριση και επιλογή λογαριασμού. Προσθέστε ένα περιορισμένο αρχείο επαναλήψεων για κάθε αίτημα, ώστε ένας απορριφθείς κωδικός να μην υποβάλλεται επ' άπειρον. Καθαρίστε αυτό το αρχείο κατά την ολοκλήρωση ή την αποτυχία. Οι καθολικές μεταβλητές του worker μπορούν να εξαφανιστούν όταν σταματήσει ο worker, γι' αυτό κρατήστε την κατάσταση που χρειάζεται μεταξύ αφυπνίσεων σε κατάλληλη περιοχή αποθήκευσης της επέκτασης.
Το storage.session επιβιώνει από επανεκκινήσεις του worker εντός της συνεδρίας του προγράμματος περιήγησης· δεν είναι μόνιμη αποθήκευση λογαριασμού μεταξύ επανεκκινήσεων του προγράμματος περιήγησης. Καθορίστε τι κάνει η επέκταση όταν δεν υπάρχει διαθέσιμος επιλεγμένος λογαριασμός.
Οι έλεγχοι isProxy και challenger εμποδίζουν μια πρόκληση άσχετης ιστοσελίδας να λάβει αυτόν τον λογαριασμό. Αν το πρόγραμμα περιήγησης δεν αποστέλλει ποτέ το συμβάν, ο καθαρισμός του ακροατή μόνος του δεν μπορεί να το παράγει: εξετάστε το πραγματικό αίτημα, τις άδειες και τη συμπεριφορά του προγράμματος περιήγησης ξεχωριστά.