Daftarkan Satu Listener Autentikasi Proxy Chrome MV3 untuk Pergantian Profil
Daftarkan listener autentikasi Manifest V3 secara sinkron dan baca akun proxy saat ini di dalam callback peristiwa.
Mengganti profil proxy seharusnya mengganti akun yang dipilih, bukan menambahkan listener onAuthRequired lain. Jika tidak, closure lama dapat terus menjawab dengan akun dari pilihan sebelumnya.
Daftarkan satu listener bernama di tingkat teratas service worker. Baca akun saat ini ketika peristiwa datang:
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'],
);Fragmen ini mengasumsikan ekstensi sudah menyimpan proxy HTTP yang dipilih di bawah selectedProxy, dengan port numerik dan akun yang dimaksud. Manifest membutuhkan webRequest, webRequestAuthProvider, storage, dan izin host yang diperlukan. Pemilihan proxy itu sendiri juga membutuhkan izin proxy.
Pendaftaran terjadi secara sinkron. Penyimpanan dibaca di dalam callback, setelah Chrome memiliki listener terpasang untuk dikirimi. Mendaftar hanya setelah promise penyimpanan awal selesai menciptakan celah bangun.
Tambahkan batas penolakan sebelum dirilis
Fragmen ini menunjukkan pendaftaran dan pemilihan akun. Tambahkan catatan percobaan ulang yang dibatasi untuk setiap permintaan agar kata sandi yang ditolak tidak dikirim tanpa batas. Bersihkan catatan itu saat selesai atau gagal. Global worker dapat hilang saat worker berhenti, jadi simpan status yang diperlukan antar-bangun di area penyimpanan ekstensi yang sesuai.
storage.session bertahan dari restart worker dalam sesi browser; ini bukan penyimpanan akun permanen antar-restart browser. Tentukan apa yang dilakukan ekstensi ketika tidak ada akun terpilih yang tersedia.
Pemeriksaan isProxy dan challenger mencegah tantangan situs web yang tidak terkait menerima akun ini. Jika browser tidak pernah mengirimkan peristiwa, pembersihan listener saja tidak dapat menghasilkannya: periksa permintaan sebenarnya, izin, dan perilaku browser secara terpisah.