Я разрабатываю плагин для 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
Большое спасибо за вашу помощь, и с сегодняшнего дня я активно начинаю свое приключение в этом сообществе.