estoy tratando de importar una clase en mi trabajador de servicio, en mi extensión de Chrome
Así que esto es lo que tengo al principio del archivo:
/*global chrome*/ try { importScripts("utils/utils.js"); } catch (e) { console.log(e); }y esta es la función donde llamo a la clase:
async function injectPopup() { try { let b = new Utils(); } catch (e) { console.log(e); } . . .el console.log me está imprimiendo esto:
ReferenceError: Utils is not defined at injectPopup (<anonymous>:4:17) at <anonymous>:28:3este es el contenido de utils/utils.js :
class utils { test() { console.log("foooo"); } }¿Puedes decirme cómo se supone que debo llamar a las clases? el objetivo es tener un código más limpio y no toda la lógica en el mismo service_worker, por lo que si hay otra práctica mejor, me encantaría saber
Gracias !
En mi caso hubo dos problemas:
Primero, como comentó wOxxOm , necesitaba crear una variable global en el archivo service_worker:
/*global chrome*/ let globals = {}; // HERE try { importScripts("utils/Utils.js"); } catch (e) { console.log(e); }Y en la declaración de clase para agregarlo al global así:
globals.Utils = class Utils { test() { console.log("foo"); } }El segundo problema fue que lo estaba llamando desde una función dada a chrome.scripting.executeScript que no puede funcionar, porque el script se ejecuta solo en la pestaña Javascript dada y no en el Javascript emergente, y es por eso que la clase no pudo ser encontrado.