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

标签 javascript

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

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

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

最佳答案

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

示例:

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

JSFiddle

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

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

更安全的示例:

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

More Secure JSFiddle

关于javascript - 在 JavaScript 应用程序中将输入的文本作为 JavaScript 运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18151336/

相关文章:

javascript - 在 Google Plus 上分享分享按钮旁边的链接

javascript - AngularJS 动态添加输入字段并保持对每个字段的引用

javascript - ES2015 `import` 替代 `require()()` ?

javascript - 如何使用两个参数进行完全匹配搜索?

javascript - 页眉/页脚导航更新 jquery

javascript - 如果找到一个或多个空格则拆分

php - 更新div中的数据

javascript - 运行此程序时,我在网络浏览器中没有收到任何响应

javascript - FireFox 4 中的 HTML5 Canvas 闪烁

javascript - 使用嵌套函数进行 JS 垃圾收集