在javascript应用程序中将输入的文本作为javascript运行?

时间:2013-08-09 16:21:55

标签: javascript

我的目标是编写一个javascript应用程序,它将文本作为输入,并将该文本编译/运行为代码。

例如,假设JS应用程序有一个可以变成红色或绿色的灯。用户输入的文字可以是lightRed();以将其变为红色,而lightGreen();可以将其变为绿色。我认为解决这类问题的标准方法是实现某种词法分析器/解析器,就像Jison所做的那样。

但是,我对JS编程很新,这似乎是一项艰巨的任务 - 特别是当我后来计划为if / else语句添加更复杂的功能时。所以我想知道是否可以将输入的文本视为javascript,主要是使用浏览器处理javascript的能力。所以javascript应用程序将有一个灯,它将具有名为lightRed()和lightGreen()的函数。输入到javascript的文本将被视为javascript,因此将lightRed()作为文本写入将直接执行应用程序中的lightRed()函数。这可能吗?这会比使用像Jison这样的东西更复杂吗?谢谢!

2 个答案:

答案 0 :(得分:6)

编译输入的JavaScript的最简单方法是使用eval function。这将评估并执行以字符串形式传递的任何代码。

示例:

eval(document.getElementById('code').value)

JSFiddle

请注意,这确实可以让用户有可能无限制地执行他想要的任何代码,因此在允许之前请仔细考虑。

为了帮助减轻任何安全风险,您可以在全局范围内执行代码,如this answer所示,防止代码访问您的任何本地变量,这就像用户运行时一样来自浏览器开发者控制台的代码。

更安全的例子:

(function(){eval.apply(this,[document.getElementById('code').value])})()

More Secure JSFiddle

答案 1 :(得分:1)

eval()会将字符串表达式评估为JavaScript。大多数人(包括我自己)会警告你安全漏洞;但是如果你考虑一下,用户可以打开javascript控制台并输入和运行所有相同的代码..所以去吧:)(/ p>