En el manifiesto v2, intento obligar al oyente onBeforeRequest a esperar una llamada asíncrona antes de la evaluación de una condición de prueba que decide si bloquear la solicitud o dejarla pasar.
La documentación y los temas con los que me encontré parecen contradictorios, algunos dicen que esta función no es compatible con webRequest, mientras que otros sugieren que podría haber soluciones alternativas.
El más prometedor que encontré hasta ahora, pero desafortunadamente no funcionó del todo en mi caso, vino de esta publicación: Usar llamadas asincrónicas en un controlador webRequest de bloqueo
¿Hay alguna idea posible para eludir este problema?
chrome.webRequest.onBeforeRequest.addListener( function() { chrome.tabs.query({active:true,windowType:"normal", currentWindow: true},function(tab){ for(const [key, value] of Object.entries(inputMaps[tab[0].id][Object.keys(inputMaps[tab[0].id])[0]])){ chrome.tabs.query({active: true, currentWindow: true}, function(tabs){ // Async call to content_script will update the testMap[curTabId] chrome.tabs.sendMessage(tabs[0].id, { text: "aadAuth", usr: Object.keys(inputMaps[tabs[0].id])[0], pass: value }) }); } }); // Need to make sure this executes after the reception of async call response // Impossible to block the request from within the async response callback method. if(testMap[curTabId]){ return {cancel: true}; }else{ return {} } }, {urls: ["<all_urls>"]}, ["blocking"] );Extracto del manifiesto:
{ "manifest_version": 2, "background": { "service_worker": "background.js" }, "permissions": [ "storage", "activeTab", "tabs", "webRequest", "webRequestBlocking", "<all_urls>" ], "browser_action": { "default_popup": "popup.html", } }