¿Cómo puedo usar una API de extensiones de Chrome que se puede usar con una función de devolución de llamada, como chrome.identity.getProfileUserInfo , en chrome.webRequest.onBeforeRequest ?
Por ejemplo, tengo una parte del script similar a:
chrome.webRequest.onBeforeRequest.addListener( function (request) { return { redirectUrl: `https://example.com` }; }, // filters here. // permissions here. ) Lo anterior funciona, redirige los intentos de solicitud a https://example.com .
Pero lo siguiente, al envolver el código en una función de devolución de llamada, la parte return/redirectUrl se ignora y no funciona; no redirecciona.
chrome.webRequest.onBeforeRequest.addListener( function (request) { chrome.identity.getProfileUserInfo(function (profileUserInfo) { console.log(profileUserInfo.email); return { redirectUrl: `https://example.com` }; }); }, // filters here. // permissions here. )Esta es una forma sincrónica de la que webRequest.onBeforeRequest solo es capaz, ¿correcto? Utilizo estas devoluciones de llamada, de forma síncrona porque aprendí que la API de extensiones de Chrome no admite una forma asíncrona (por ejemplo, async/await, Promise) como pregunté el otro día: javascript - async in chrome.webRequest.onBeforeRequest? - Desbordamiento de pila
Entonces, ¿es posible usar chrome.identity.getProfileUserInfo en chrome.webRequest.onBeforeRequest? Gracias.
No, no puedes. "chrome.identity.getProfileUserInfo" como la mayoría de "chrome". Los métodos toman tiempo para hacerlo, por lo tanto, la función de devolución de llamada. "chrome.webRequest.onBeforeRequest" solo admite la opción de "bloqueo", pero no "asyncBlocking". Pero en su caso, podría asignar fácilmente ProfileUserInfo a una variable de antemano en algún lugar de su script de fondo y usarlo así.