es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hago para que un script de contenido se cargue antes que otro script de contenido (que se ejecuta en el mismo evento) en una extensión de Firefox?

Aquí hay una parte de mi archivo manifest.json:

“content_scripts”: [ {
“js”: [ “common.js”, “generation.js” ],
“matches”: [ “://www.site.com/” ],
“run_at”: “document_start”
},
{
“js”: [ “page_init.js” ],
“matches”: [ “://www.site.com/” ],
“run_at”: “document_start”
},

Aquí, quiero ejecutar “common.js” antes de “page_init.js”, ya que common.js contiene mucho código compartido y variables y funciones globales que otros scripts de contenido necesitan para funcionar. He definido common.js antes que page_init.js en mi manifiesto y, en Chrome, al hacer esto, common.js se ejecuta antes que todos los demás scripts de contenido, que es lo que necesito. Sin embargo, en Firefox, parece que no hace esto.

Sin embargo, cuando ejecuto esta extensión en Firefox, page_init lanza un error:

ReferenceError: href no está definido.

“href” es una variable que está definida en common.js.

¿Necesito hacer que page_init.js se ejecute al final del documento para que common.js se ejecute completamente o hay otra manera? Necesito que ambos se ejecuten al inicio del documento.

ACTUALIZACIÓN:

Logré resolver el problema cambiando el contenido del manifiesto a esto:
“content_scripts”: [
{
“js”: [ “common.js”, “generation.js”, “page_init.js” ],
“matches”: [ “://www.site.com/” ],
“run_at”: “document_start”
},

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que los scripts de contenido se cargan en el orden en el que están definidos en el archivo de manifiesto, pero no hay garantía de que se ejecuten en ese orden. En este caso, parece que Firefox está cargando los scripts en el orden correcto, pero ejecutándolos en un orden diferente.

    Para asegurarse de que common.js se cargue completamente antes que page_init.js, existen algunas opciones:

    1. Como se mencionó en la actualización, incluya ambos scripts en la misma matriz de scripts de contenido, con common.js listado antes que page_init.js. Esto debería garantizar que ambos scripts se carguen y se ejecuten en el orden correcto.
    2. Utilice el paso de mensajes para comunicarse entre los scripts. En este enfoque, common.js se cargaría en un script de contenido separado y enviaría un mensaje a page_init.js cuando esté completamente cargado y listo para ser utilizado. Page_init.js esperaría este mensaje antes de continuar con su propia ejecución.

    Ambos enfoques deberían garantizar que common.js se cargue completamente antes que page_init.js y evitar que se produzca el error.

Comments are closed.