在javascript应用程序中以javascript的形式运行输入的文本
Run inputted text as javascript in a javascript application?
我的目标是编写一个javascript应用程序,该应用程序将文本作为输入,并将该文本作为代码编译/运行。
例如,假设JS应用程序有一个可以变成红色或绿色的灯。用户输入的文本可以是lightRed();
使其变红,lightGreen();
使其变绿。我认为解决这类问题的标准方法是实现某种lexer/parser,就像Jison所做的那样。
然而,我对JS编程还很陌生,这似乎是一项艰巨的任务——尤其是当我后来计划向它添加更复杂的功能时,比如if/else语句。所以我想知道是否可以将输入的文本作为javascript处理,本质上使用浏览器处理javascript的能力。因此,javascript应用程序将有一个灯,它将有名为lightRed()和lightGreen()的函数。输入到javascript的文本将被视为javascript,因此将lightRed()写成文本将直接执行应用程序中的lightRed(()函数。这可能吗?这会比仅仅使用Jison这样的东西更复杂吗?谢谢
编译输入的JavaScript最简单的方法是使用eval函数。这将计算并执行作为字符串传入的任何代码。
示例:
eval(document.getElementById('code').value)
JSFiddle
请注意,这确实让用户有可能无限制地执行他想要的任何代码,所以在允许这样做之前要仔细考虑。
为了帮助减轻任何安全风险,您可以在全局范围内执行代码,如本答案所示,防止代码访问任何本地变量,这就像用户从浏览器的开发人员控制台运行代码一样。
更安全的示例:
(function(){eval.apply(this,[document.getElementById('code').value])})()
更安全的JSFiddle
eval()
将字符串表达式求值为JavaScript。大多数人(包括我自己)都会提醒你注意安全漏洞;但如果你仔细想想,用户可以打开javascript控制台,键入并运行所有相同的代码。。因此:)
- Javascript运行php文件,然后下载文件
- JavaScript运行时是如何工作的
- Javascript运行Total保持添加
- JavaScript运行时事件循环现有技术
- 当出现javascript运行时错误时会发生什么
- 使用JavaScript运行脚本
- 在gwt HTMLPanel中使用JavaScript运行Google图表
- 在从HTML表单提交时从javascript运行php
- JavaScript运行时错误:完成此操作所需的数据尚不可用
- RoR最快的javascript运行时
- Windows 8应用程序正在运行,现在得到0x800a1391-JavaScript运行时错误:'WinJS&
- 如何从 MVC4 链接调用 Javascript 方法(错误 JavaScript 运行时错误:对象不支持此操作)
- JavaScript运行后,页面在右侧被切断
- JavaScript 运行时错误仅在本地计算机上
- JavaScript 引擎和 JavaScript 运行时环境有什么区别
- 如何从javascript运行java代码
- Javascript 运行时错误:“应用程序未定义”
- 从Javascript运行PHP文件来检查在线用户:表示未登录的用户是
- JavaScript运行时错误,未定义jQuery
- MVC4和日期选择器:“;0x800a01b6-JavaScript运行时错误:对象没有't支持属性或方法