Estoy tratando de hacer una extensión de Firefox que agregará un botón para tomar una captura de pantalla de la pestaña activa. Cuando llamo a 'captureVisibleTab', la llamada parece colgarse: la función nunca ejecuta la siguiente línea. Código mínimo para mostrar el problema:
let shotBtn = document.createElement("button"); shotBtn.innerHTML = "Shot"; shotBtn.onclick = function () { takeShot(); }; document.body.appendChild(leftBtn); async function takeShot() { leftBtn.innerHTML = "Start"; // This line executes. const shot = await browser.tabs.captureVisibleTab(); leftBtn.innerHTML = "Done"; // This line does not. }Veo que el texto del botón cambia a "Inicio", pero no veo que cambie a "Listo".
Probé algunas variantes: elimine el 'esperar' y agregue el manejo "shot.then" en su lugar, y coloque la llamada captureVisibleTab directamente en el método onclick en lugar de un método asíncrono separado. Agregué el permiso "<all_urls>" en mi archivo de manifiesto, pero no estoy seguro de que se me haya otorgado el permiso. ¿Hay alguna forma de verificar esto?
Soy nuevo en JavaScript y las extensiones web en general, por lo que puede haber algún defecto fundamental en mi comprensión de cómo debería funcionar esta función asincrónica. ¿Es posible que algún recolector de basura esté tomando el objeto de función antes de que termine de ejecutarse? Si es así, ¿cómo puedo evitar esto en un método 'onclick'?
Debería haber leído un poco más profundamente antes de escribir mi pregunta. Estaba tratando de hacer lo anterior en un script de contenido, que no permite usar captureVisibleTab; tienes que hacer eso en un script de fondo. Si, como yo, eres un novato en desarrollo web y acabas de enterarte de que existe esta distinción, puedes leer sobre ella aquí .