Tengo algunas aplicaciones que crean widgets dinámicamente. Algunos widgets necesitan que se incluyan algunas bibliotecas (por ejemplo, Codemirror, Tinymce, jQuery, ..). Estos scripts se agregan dinámicamente en el documento cuando se crea el widget por primera vez; de lo contrario, no se incluyen en absoluto (sería una pérdida de recursos incluir previamente todos los scripts de widgets posibles sin que se usen en cada solicitud).
Los widgets se pueden crear del lado del servidor o del lado del cliente. En el lado del cliente, los scripts se agregan dinámicamente en la página; de lo contrario, el servidor los agrega como etiquetas de script en la salida html resultante.
Si en cliente, he notado que no se respeta el orden de ejecución. Por ejemplo, algunos complementos de Codemirror se cargan primero (como más livianos), pero fallan porque la biblioteca principal aún no está cargada (aunque viene antes que ellos como etiqueta de secuencia de comandos).
Intenté usar el atributo defer que, según MDN , respeta el orden de ejecución tal como aparece , aunque los scripts se cargan de forma asíncrona. Sin embargo, noté que falla ( tenga en cuenta que solo uso el atributo defer , no async ). Probado en Firefox y Chrome hasta ahora.
¿Es esto cierto también para las etiquetas de script agregadas dinámicamente?
Si no, ¿cuál puede ser una alternativa para respetar el orden de ejecución ( sin usar devoluciones de llamada en carga )?
¡Gracias!
Resolví el problema usando devoluciones de llamada para esperar hasta que se haya cargado un script antes de adjuntar un nuevo script en el DOM (que depende del script anterior).
Sin embargo, espero que este procedimiento sea manejado por el navegador (por ejemplo, usando el atributo defer ).
Si alguien tiene una solución en la que el navegador maneja todos estos enlaces para las etiquetas de secuencias de comandos agregadas dinámicamente, no dude en publicar una respuesta.