执行以stringforms存储的JavaScript代码
如何执行一些string的JavaScript?
function ExecuteJavascriptString() { var s = "alert('hello')"; // how do I get a browser to alert('hello')? }
用eval("my script here")
function。
你可以使用一个函数来执行它。 例:
var theInstructions = "alert('Hello World'); var x = 100"; var F=new Function (theInstructions); return(F());
eval
函数将评估传递给它的string。
但是使用eval
可能是危险的 ,所以谨慎使用。
编辑: annakata有一个好点 – 不仅是危险的 ,它是缓慢的 。 这是因为要评估的代码必须在现场进行parsing,因此需要一些计算资源。
使用eval()。
W3学校eval游览 。 网站有一些有用的eval的例子。 Mozilla文档详细介绍了这一点。
您可能会收到很多有关使用此安全的警告 。 不允许用户将任何东西注入到eval()中,因为这是一个巨大的安全问题。
你也想知道eval()有不同的范围 。
尝试这个:
var script = "<script type=\"text/javascript\"> content </script>"; //using jquery next $('body').append(script);//incorporates and executes inmediatelly
我个人没有testing它,但似乎工作。
使用eval如下。 应谨慎使用Eval,一个简单的search“ eval是邪恶的 ”应该抛出一些指针。
function ExecuteJavascriptString() { var s = "alert('hello')"; eval(s); }
检查了很多复杂和模糊的脚本:
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);
eval(s);
但是,如果你正在从用户那里获取数据,这可能是危险的,但是我想如果他们自己的浏览器崩溃就是他们的问题。
有点像@Hossein Hajizadeh alerady说的,虽然更详细些:
有一个替代eval()
。
函数setTimeout()
被devise为在毫秒的时间间隔之后执行某些事情,而要执行的代码恰好被格式化为一个string。
它会这样工作:
ExecuteJavascriptString(); //Just for running it function ExecuteJavascriptString() { var s = "alert('hello')"; setTimeout(s, 1); }
eval应该这样做。
eval(s);
不知道这是否作弊:
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
如果你想在特定的时间后执行特定的命令(即string) – cmd =你的代码 – InterVal =运行延迟
function ExecStr(cmd, InterVal) { try { setTimeout(function () { var F = new Function(cmd); return (F()); }, InterVal); } catch (e) { } } //sample ExecStr("alert(20)",500);
eval(s);
记住,这个eval是非常强大的,相当不安全。 您最好确信您正在执行的脚本是安全的,并且是用户不可变的。
新函数和apply()一起工作也
var a=new Function('alert(1);') a.apply(null)