0

Firefox 기본 메시지를 사용하여 URL 관리자를 만들려고합니다. 문제는 네이티브 응용 프로그램에서 답신을 보내면 onBeforeRequest 수신기가 이미 요청을 릴리스 했으므로 리디렉션이 발생하지 않는다는 것입니다. 응답 내선이 최대 2 초 동안 대기하도록하고 응답이 "0"이면 요청을 리디렉션 할 수 있습니까?Firefox 기본 메시지를 사용하여 URL 검사

var port = browser.runtime.connectNative("ping_pong"); 

function inspectURL(requestDetails) { 
    console.log("Loading: <" + requestDetails.url + ">"); 
    port.postMessage(requestDetails.url); 
    console.log("Posting complete <" + requestDetails.url + ">"); 
} 

port.onMessage.addListener((response) = > { 
    console.log("Received: <" + response + ">"); 
    if (response == "1") 
    { 
     console.log("Good url!!!"); 
    } 
    else 
    { 
     console.log("BAD url - redirecting!!!"); 
     return { 
     redirectUrl: "https://38.media.tumblr.com/tumblr_ldbj01lZiP1qe0eclo1_500.gif" 
     }; 
    } 
}); 

browser.webRequest.onBeforeRequest.addListener(
    inspectURL, 
    { urls: ["<all_urls>"] }, 
    ["blocking"] 
); 

답변

0

전혀 없습니다.

네이티브 메시징은 비동기 API입니다. 메시지를 게시 한 후 이벤트 루프로 돌아가 (예 : 현재 코드가 종료 됨)까지 답장을 보내지 않습니다.

그러나 WebRequest API를 차단하려면 동기화 회신이 필요합니다. 이것은 비동기 회신이 불확실한 지연 후에 절대로 오지 않을 수도 있고 네트워크 스택이이를 기다리지 않기 때문에 핵심적인 제한 사항입니다. 내 말은, 가능하다. 그러나 API의 디자인은 의도적으로 그것을 금지한다.

기본적으로 : 응답이 준비되어 있어도 inspectURL이 종료 될 때까지 코드가 수신하지 않습니다.이 시점에서 WebRequest는 이미 요청을 처리합니다. There is no way in JavaScript으로 동기화하십시오.

0

파이어 폭스

파이어 폭스 전방 파이어 폭스 (52)로부터 비동기 webRequest 차단/수정 수신기를 지원한다. (:) webRequest: Modifying requests (여러 다른 페이지 MDN)을 이렇게하려면 파이어 폭스 (52)에서

는 이후, 대신 BlockingResponse을 반환하는 청취자는 BlockingResponse로 해결되는 Promise를 반환 할 수 있습니다. 그러면 리스너는 요청을 비동기 적으로 처리 할 수 ​​있습니다.

따라서 wrbRequest.onBeforeRequest 청취자는 BlockingResponse으로 해결할 Promise를 반환합니다.

port에서 정보를 요청한 요청 목록을 저장해야합니다. portresponse은 응답하는 요청을 고유하게 식별해야합니다. 이것은 모두 비동기식이므로 동시에 여러 요청을 할 수 있습니다. 당신은 이것들을 적절히 추적해야하며 resolve만이 적절한 약속입니다. port의 응답이 급속하게 변하지 않는다고 가정하면 확인 된 URL 목록을 저장해야합니다 (좋고 나쁨). 따라서 이미 확인 된 URL에 즉시 응답 할 수 있습니다.

크롬

Chrome에서 원하는 것은 가능하지 않습니다. 다른 방법으로 문제를 해결해야합니다.