Плагин в Firefox JavaScript - Ссылка родного приложения с обещаниями - PullRequest
0 голосов

Я разрабатываю плагин для Firefox +57 с использованием WebExtension. Этот плагин связывается с собственным приложением .exe, с помощью которого я открыл один порт, с которым я выполняю связь дополнение-appNative. Упрощенно, дополнение выполняет основную аутентификацию, которая использует слушателя и обещания. Вопрос в том, как я могу связать слушателей моего родного приложения с слушателями базовой аутентификации через обещания. Мы увидим это лучше с кодом:

var port;
try {
   port = browser.runtime.connectNative("myAPP");
   port.onMessage.addListener(onNativeMessage);
} catch(err) {
   Console.log(err.message);
}  

 //Native message listener
function onNativeMessage(message) {
 .
 .more code
 .
  else if (message.response == "basicAuthentication") {
    processBasicAuth(message.data);
  }

}
function basicAuthListener(requestDetails) {
    //*
    //HERE GOES CODE TO PREPARE MY PETITION TO THE NATIVE APP
    // WHOSE ANSWER I WILL COLLECT IN THE LISTENER METHOD processBasicAuth
    */
    var request;

    //prepare request through requestDetails and send

    port.postMessage(request);

    if (pendingRequests.indexOf(requestDetails.requestId) != -1) {

        //retun a PROMISE with cancel

    } else {
        pendingRequests.push(requestDetails.requestId);             
        // return a PROMISE with credentials        
    }
}

function processBasicAuth(message) {

    if(message.action == "ok" ) {
        //Resolve a PROMISE with:           
        /*{
            authCredentials: {
                username: message.username, 
                password: message.password
            }
        }*/ 
    }else{
        // Resolve a PROMISE with "{cancel : true}"         
    }
}   

function completed(requestDetails) {
    var index = pendingRequests.indexOf(requestDetails.requestId);
    if (index > -1) {
    pendingRequests.splice(index, 1); 
    }   
}

browser.webRequest.onAuthRequired.addListener(basicAuthListener, filter, extraInfoSpec);
browser.webRequest.onCompleted.addListener( completed, filter);
browser.webRequest.onErrorOccurred.addListener( completed,filter);

//end code

Большое спасибо за вашу помощь, и с сегодняшнего дня я активно начинаю свое приключение в этом сообществе.

...