dinámico: ¿Cargar JavaScript desde texto HTML dinámicamente?

CorePress2024-01-16  11

Tengo un HTML modular de una sola página que carga dinámicamente contenido HTML en función de una amplia variedad de atributos que no son importantes. El siguiente código funciona muy bien excepto que el script no está cargado. Tengo un lugar en la función de carga dinámica para insertar script pero no encuentro ningún ejemplo de este tipo de carga. Todo supone un archivo src, sin embargo, sé que puedes hacer algo como lo siguiente con element.text pero no estoy seguro de cómo cargarlo desde el texto html.

Tenga en cuenta que todas las referencias que he encontrado se cargan a través de un .src y no del .text que necesito.

function dynamicLoad(elem, sourceCode) {
        // load html not the issue        
        elem.innerHTML = sourceCode;
        // load JS -- this is with solution ---
        var doc = document.implementation.createHTMLDocument(); // Sandbox
        doc.body.innerHTML = sourceCode; // Parse HTML properly
 // --- This is the solution below, will load all scripts found    
        [].map.call(doc.getElementsByTagName('script'), function(el) {       
          var e = document.createElement('script');
          e.text = el.textContent;
          document.body.appendChild(e);        
        }
  }

¿Esto responde a tu pregunta? ¿Cómo incluyo un archivo JavaScript en otro archivo JavaScript?

- MP 77-1

19/03/2021 a las 20:19

stackoverflow.com/questions/14521108/…

- MP 77-1

19/03/2021 a las 20:20

¿Quieres ejecutar la etiqueta del script cargado? entonces podrías usar la función eval para ejecutar javascriptdentro

-Adnane Ar

19/03/2021 a las 20:26

@AdnaneAr ¿Eso cargará el script? Usando el código anterior, ¿sería eval(data)? Esto genera un error "VM: no detectado (en promesa) SyntaxError: token inesperado '<'"

- usuario1607416

19/03/2021 a las 20:58

Puedes intentar obtener el script js como cadena y ejecutarlo así eval(jsString)

-Adnane Ar

19/03/2021 a las 21:04



------------------------------------

Refiriéndose a mi comentario sobre esta respuesta, no sé si eso es realmente lo que estás buscando, ¡pero espero que te ayude!

var loadedScript = "alert('Eval is working!')";

function evalScript() {
  return eval(loadedScript);
}
<button onclick="evalScript()">Eval script</button>

0



------------------------------------

La respuesta está publicada en el código en línea arriba, pero aquí está:

// Insert JS 
var doc = document.implementation.createHTMLDocument(); // Sandbox
doc.body.innerHTML = data; // Parse HTML properly
[].map.call(doc.getElementsByTagName('script'), function(el) {       
  var e = document.createElement('script');
  e.text = el.textContent;
  document.body.appendChild(e);        
});

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare