Estoy tratando de lograr lo siguiente: cancelar el evento (evitar que se cargue la página) si el enlace coincide con uno de los enlaces almacenados en el almacenamiento de Google y abrir el enlace en la ventana de incógnito.
if link exists in Google storage: e.preventDefault();Esta lógica se realiza en el script de contenido vinculando el oyente en el objeto del documento para interceptar cualquier enlace.
document.addEventListener('DOMContentLoaded', () => { document.body.addEventListener('click', onClick); }); Sin embargo, hasta que verifique si el enlace existe en el almacenamiento de Google, la página termina de cargarse. Creo que esto se debe a que chrome.storage.sync.get es asíncrono y la página simplemente termina de cargarse antes de que se pueda llamar a e.preventDefault() .
Discusión similar: https://stackoverflow.com/questions/9237044/async-loaded-scripts-with-domcontentloaded-or-load-event-handlers-not-being-call[][1] .
La funcionalidad que necesito: https://stackoverflow.com/questions/38619308/how-to-block-a-tab-from-opening-a-page-on-webnavigation-onbeforenavigate-event[][2]
El problema con la respuesta aceptada es que la página está parcialmente cargada. No quiero cargar la página en absoluto.
¿Cómo puedo preparar la lista de enlaces desde el almacenamiento de Google sin llamadas asincrónicas dentro de onClick ? ¿O cómo puedo lograr la funcionalidad deseada de manera diferente?
Utilicé la API chrome.declarativeNetRequest para redirigir los nombres de dominio enumerados por los usuarios a https://google.com/gen_204 y el evento onRuleMatchedDebug para obtener la URL original y abrirla en una ventana de incógnito.