프로필 전환을 위한 Chrome MV3 프록시 인증 리스너 하나만 등록하기
Manifest V3 인증 리스너를 동기적으로 등록하고 이벤트 콜백 안에서 현재 프록시 계정을 읽으세요.
프록시 프로필을 전환할 때는 선택된 계정이 바뀌어야 하며, onAuthRequired 리스너를 하나 더 추가해서는 안 됩니다. 그렇지 않으면 이전 선택의 계정으로 이전 클로저가 계속 응답할 수 있습니다.
서비스 워커의 최상위 수준에 이름이 있는 리스너 하나를 등록하세요. 이벤트가 도착하면 현재 계정을 읽으세요:
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 권한이 필요합니다.
등록은 동기적으로 이루어집니다. 저장소는 Chrome이 전달할 설치된 리스너를 가진 뒤 콜백 안에서 읽힙니다. 초기 storage 프로미스가 해결된 뒤에야 등록하면 깨어나는 공백이 생깁니다.
출시 전에 거부 한도를 추가하세요
이 조각은 등록과 계정 선택을 보여 줍니다. 거부된 비밀번호가 무한정 제출되지 않도록 요청마다 제한된 재시도 기록을 추가하세요. 완료되거나 실패하면 그 기록을 정리하세요. 워커가 중지되면 워커 전역이 사라질 수 있으므로 깨어나는 사이에 필요한 상태는 확장 프로그램의 적절한 저장 영역에 보관하세요.
storage.session은 브라우저 세션 안에서 워커 재시작을 견딥니다. 브라우저 재시작 사이의 영구 계정 저장소는 아닙니다. 선택된 계정이 없을 때 확장 프로그램이 무엇을 하는지 정의하세요.
isProxy와 challenger 검사는 관련 없는 웹사이트의 챌린지가 이 계정을 받지 못하게 막습니다. 브라우저가 이벤트를 전혀 전달하지 않는다면 리스너 정리만으로는 그것을 만들 수 없습니다. 실제 요청, 권한, 브라우저 동작을 각각 따로 점검하세요.