רישום מאזין אימות proxy אחד של Chrome MV3 להחלפת פרופיל
רישמו את מאזין האימות של Manifest V3 באופן סינכרוני וקראו את חשבון ה-proxy הנוכחי בתוך קריאת החוזרת של האירוע.
החלפת פרופילי proxy צריכה להחליף את החשבון הנבחר, לא להוסיף מאזין onAuthRequired נוסף. אחרת סגירות ישנות יכולות להמשיך להשיב עם החשבון מהבחירה הקודמת.
רשמו מאזין אחד בעל שם ברמה העליונה של ה-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, עם פורט מספרי והחשבון המיועד. המניפסט זקוק ל-webRequest, webRequestAuthProvider, storage ולהרשאות המארח הנדרשות. גם בחירת ה-proxy עצמה זקוקה להרשאת proxy.
הרישום מתרחש באופן סינכרוני. האחסון נקרא בתוך הקריאה החוזרת, אחרי של-Chrome יש מאזין מותקן לשלוח אליו. רישום רק לאחר הבטחת אחסון ראשונית נפתרת יוצר פער התעוררות.
הוסיפו מגבלת דחייה לפני ההפצה
הקטע מציג רישום ובחירת חשבון. הוסיפו רשומת ניסיון חוזר מוגבלת לכל בקשה כדי שסיסמה שנדחתה לא תישלח ללא הגבלה. נקו את הרשומה בסיום או בכשל. משתנים גלובליים של ה-worker עלולים להיעלם כשהעובד נעצר, לכן שמרו את המצב הנדרש בין התעוררויות באזור אחסון מתאים של ההרחבה.
storage.session שורד הפעלות מחדש של ה-worker בתוך הפעלת הדפדפן; הוא אינו אחסון חשבון קבוע בין הפעלות מחדש של הדפדפן. הגדירו מה ההרחבה עושה כשאין חשבון נבחר זמין.
בדיקות isProxy ו-challenger מונעות מאתגר של אתר לא קשור לקבל את החשבון הזה. אם הדפדפן לא שולח את האירוע לעולם, ניקוי המאזין לבדו אינו יכול ליצור אותו: בדקו את הבקשה בפועל, את ההרשאות ואת התנהגות הדפדפן בנפרד.