如何执行一些字符串JavaScript?执行存储为字符串的JavaScript代码
function ExecuteJavascriptString()
{
var s = "alert('hello')";
// how do I get a browser to alert('hello')?
}
如何执行一些字符串JavaScript?执行存储为字符串的JavaScript代码
function ExecuteJavascriptString()
{
var s = "alert('hello')";
// how do I get a browser to alert('hello')?
}
eval
function将评估传递给它的字符串。
但是使用eval
can be dangerous,所以慎用。
编辑: annakata好点 - 不仅是eval
危险,它是慢。这是因为要评估的代码必须在现场解析,因此需要一些计算资源。
使用eval()。
W3 Schools tour of eval。网站有一些有用的eval例子。 The Mozilla documentation covers this in detail.
您可能需要get a lot of warnings以安全地使用它。 不允许用户将任何东西注入eval(),因为这是一个巨大的安全问题。
您还想知道eval()有不同的scope。
http://www.w3fools.com/。对于eval,W3C甚至没有什么可说的。如果你想链接到官方的东西,目标http://ecma-international.org/ecma-262/5.1/#sec-15.1.2.1 – Bergi 2013-08-05 15:34:12
eval应该这样做。
eval(s);
eval(s);
但这可能是危险的,如果你是从用户获取数据,但我想,如果他们崩溃自己的浏览器那是他们的问题。
eval(s);
请记住,该eval是非常强大和相当不安全。你最好确信你正在执行的脚本是安全的,并且是用户不可变的。
使用eval如下。应谨慎使用Eval,关于“eval is evil”的简单搜索应引起一些注意。
function ExecuteJavascriptString()
{
var s = "alert('hello')";
eval(s);
}
试试这个:
var script = "<script type=\"text/javascript\"> content </script>";
//using jquery next
$('body').append(script);//incorporates and executes inmediatelly
个人而言,我没有测试它,但似乎工作。
您可以使用函数执行它。例如:
var theInstructions = "alert('Hello World'); var x = 100";
var F=new Function (theInstructions);
return(F());
如果要执行特定的命令(即字符串)一个 具体时间 后 - CMD =你的代码 - 间隔=延时运行
function ExecStr(cmd, InterVal) {
try {
setTimeout(function() {
var F = new Function(cmd);
return (F());
}, InterVal);
} catch (e) { }
}
//sample
ExecStr("alert(20)",500);
不知道这是欺骗或不:
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
经过这许多复杂和模糊的脚本:
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);
像什么@Hossein Hajizadeh alerady说了一下,但更详细:
还有就是eval()
替代。
函数setTimeout()
被设计为在毫秒的时间间隔后执行某些操作,并且要执行的代码恰好被格式化为字符串。
它的工作是这样的:
ExecuteJavascriptString(); //Just for running it
function ExecuteJavascriptString()
{
var s = "alert('hello')";
setTimeout(s, 1);
}
1
意味着它会等待1毫秒执行字符串之前。
它可能不是最正确的方法,但它的工作原理。
新功能和apply()协同工作,也
var a=new Function('alert(1);')
a.apply(null)
我回答类似的问题,并得到了另一种思路如何在不使用eval()
实现这一目标:
const source = "alert('test')";
const el = document.createElement("script");
el.src = URL.createObjectURL(new Blob([source], { type: 'text/javascript' }));
document.head.appendChild(el);
基本上在上面的代码你创建包含脚本的Blob,以创建Object URL(在浏览器内存中表示File或Blob对象)。由于<script>
标记上有src
属性,因此脚本将以与从任何其他URL加载相同的方式执行。
function executeScript(source) {
var script = document.createElement("script");
script.onload = script.onerror = function(){ this.remove(); };
script.src = "data:text/plain;base64," + btoa(source);
document.body.appendChild(script);
}
executeScript("alert('Hello, World!');");
超级危险的和缓慢的 - 你应该粗体,斜体,下划线和H1是 – annakata 2009-06-02 13:00:25
我怀疑这是比任何页面时,必须被解析以及上加载JavaScript其他地方慢。如果速度较慢,那是因为它在不同的范围内完成,这可能会强制为该范围创建资源。 – cgp 2009-06-02 13:16:53
如果你说`eval()`是危险的。有其他选择吗? – 2012-05-22 15:36:43