Ejecutar código JavaScript almacenado como una cadena

¿Cómo ejecuto algo de JavaScript que es una cadena?

function ExecuteJavascriptString() { var s = "alert('hello')"; // how do I get a browser to alert('hello')? } 

14 Solutions collect form web for “Ejecutar código JavaScript almacenado como una cadena”

Con la function eval("my script here") .

Puedes ejecutarlo usando una function. Ejemplo:

 var theInstructions = "alert('Hello World'); var x = 100"; var F=new Function (theInstructions); return(F()); 

La function eval evaluará una cadena que se le pasa.

Pero el uso de eval puede ser peligroso , así que úselo con precaución.

Editar: annakata tiene un buen punto: no solo eval es peligroso , es lento . Esto se debe a que el código que se va a evaluar se debe analizar al instante, por lo que se necesitarán algunos resources informáticos.

Use eval ().

W3 Schools tour de eval . El sitio tiene algunos ejemplos utilizables de eval. La documentation de Mozilla cubre esto en detalle.

Probablemente recibirá muchas advertencias sobre el uso de esto de manera segura. NO permita que los usuarios inyecten NADA en eval () ya que es un gran problema de security.

También querrá saber que eval () tiene un scope diferente.

Prueba esto:

  var script = "<script type=\"text/javascript\"> content </script>"; //using jquery next $('body').append(script);//incorporates and executes inmediatelly 

Personalmente no lo probé, pero parece funcionar.

Use eval como abajo. Eval debe usarse con precaución, una simple búsqueda sobre " eval es malo " debería arrojar algunos consejos.

 function ExecuteJavascriptString() { var s = "alert('hello')"; eval(s); } 

Comtesting esto en muchos scripts complejos y ofuscados:

 var js = "alert('Hello, World!');" // put your JS code here var oScript = document.createElement("script"); var oScriptText = document.createTextNode(js); oScript.appendChild(oScriptText); document.body.appendChild(oScript); 

Un poco como lo que dijo @Hossein Hajizadeh alerady, aunque con más detalle:

Hay una alternativa a eval() .

La function setTimeout() está diseñada para ejecutar algo después de un intervalo de milisegundos, y el código que se va a ejecutar acaba siendo formateado como una cadena.

Funcionaría así:

 ExecuteJavascriptString(); //Just for running it function ExecuteJavascriptString() { var s = "alert('hello')"; setTimeout(s, 1); } 
 eval(s); 

Pero esto puede ser peligroso si está tomando datos de los usuarios, aunque supongo que si bloquean su propio browser ese es su problema.

eval debe hacerlo.

 eval(s); 

No estoy seguro de si esto es hacer trampa o no:

 window.say = function(a) { alert(a); }; var a = "say('hello')"; var p = /^([^(]*)\('([^']*)'\).*$/; // ["say('hello')","say","hello"] var fn = window[p.exec(a)[1]]; // get function reference by name if( typeof(fn) === "function") fn.apply(null, [p.exec(a)[2]]); // call it with params 

Si desea ejecutar un command específico (que es una cadena) después de un time específico – cmd = su código – InterVal = demora para ejecutar

  function ExecStr(cmd, InterVal) { try { setTimeout(function () { var F = new Function(cmd); return (F()); }, InterVal); } catch (e) { } } //sample ExecStr("alert(20)",500); 
 eval(s); 

Recuerde, sin embargo, que eval es muy poderoso y bastante inseguro. Es mejor que esté seguro de que el script que está ejecutando es seguro y no modificable por los usuarios.

Nueva function y aplicar () juntos también funciona

 var a=new Function('alert(1);') a.apply(null) 
Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.