我如何执行一些JavaScript是一个字符串?
function ExecuteJavascriptString()
{
var s = "alert('hello')";
// how do I get a browser to alert('hello')?
}
我如何执行一些JavaScript是一个字符串?
function ExecuteJavascriptString()
{
var s = "alert('hello')";
// how do I get a browser to alert('hello')?
}
当前回答
如下所示使用eval。Eval应该谨慎使用,一个关于“Eval is evil”的简单搜索应该会抛出一些指针。
function ExecuteJavascriptString()
{
var s = "alert('hello')";
eval(s);
}
其他回答
我正在回答类似的问题,并得到了另一个想法,如何在不使用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(浏览器内存中的文件或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!');");
Eval应该这样做。
eval(s);
使用eval函数,比如:
eval("my script here");
有点像@Hossein Hajizadeh alerady说的,不过更详细:
有一个替代eval()的方法。
函数setTimeout()被设计为在毫秒间隔后执行一些东西,而要执行的代码恰好格式化为字符串。
它是这样工作的:
ExecuteJavascriptString ();//只是为了运行它 ExecuteJavascriptString()函数 { Var s = "alert('hello')"; setTimeout (s, 1); }
1表示它将在执行字符串前等待1毫秒。
这可能不是最正确的方法,但它确实有效。