Profil değiştirme için tek bir Chrome MV3 proxy kimlik doğrulama dinleyicisi kaydedin
Manifest V3 kimlik doğrulama dinleyicisini eşzamanlı olarak kaydedin ve geçerli proxy hesabını olay geri çağrısının içinde okuyun.
Proxy profillerini değiştirmek seçili hesabı değiştirmeli, başka bir onAuthRequired dinleyicisi eklememelidir. Aksi halde eski closures önceki seçimden kalan hesapla yanıt vermeye devam edebilir.
Hizmet çalışanının en üst düzeyinde tek bir adlandırılmış dinleyici kaydedin. Bir olay geldiğinde geçerli hesabı okuyun:
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'],
);Bu parça, uzantının seçili HTTP proxy'sini zaten selectedProxy altında, sayısal bir bağlantı noktası ve amaçlanan hesabıyla sakladığını varsayar. Manifest webRequest, webRequestAuthProvider, storage ve gerekli ana makine izinlerine ihtiyaç duyar. Proxy seçiminin kendisi de proxy iznine ihtiyaç duyar.
Kayıt eşzamanlı olarak gerçekleşir. Depolama, Chrome'un gönderebileceği kurulu bir dinleyicisi olduktan sonra geri çağrının içinde okunur. Yalnızca başlangıçtaki storage sözü çözüldükten sonra kaydolmak bir uyanma boşluğu yaratır.
Yayından önce bir ret sınırı ekleyin
Parça, kaydı ve hesap seçimini gösterir. Reddedilen bir parolanın sonsuza kadar gönderilmemesi için her istek için sınırlı bir yeniden deneme kaydı ekleyin. Bu kaydı tamamlandığında veya başarısız olduğunda temizleyin. Çalışan durduğunda worker global değişkenleri kaybolabilir, bu nedenle uyanmalar arasında gereken durumu uzantının uygun depolama alanında tutun.
storage.session, tarayıcı oturumu içinde çalışan yeniden başlatmalarına dayanır; tarayıcı yeniden başlatmaları arasında kalıcı hesap depolaması değildir. Seçili hesap yokken uzantının ne yaptığını tanımlayın.
isProxy ve challenger kontrolleri, ilgisiz bir web sitesinin meydan okumasının bu hesabı almasını engeller. Tarayıcı olayı hiç göndermezse, yalnızca dinleyici temizliği bunu üretemez: gerçek isteği, izinleri ve tarayıcı davranışını ayrı ayrı inceleyin.