【问题标题】:How can I execute code that a user inputs into my ACE editor on my page如何执行用户在我的页面上输入到我的 ACE 编辑器的代码
【发布时间】:2014-05-07 03:29:02
【问题描述】:
我在我的页面上使用ACE Editor 作为我的文本编辑器,用户将输入代码。
如果可能,我希望执行用户在浏览器中输入的代码。如何从编辑器获取输入并使用 Browsers V8 JavaScript 编译器?
然后我将尝试在 Node.js 上运行它,但首先我必须学习 Node :)。
【问题讨论】:
标签:
javascript
ace-editor
【解决方案1】:
获取一些用户输入的代码并使用 JavaScript 运行它相对简单。本质上,您将从 ACE 获取代码:
var code = editor.getValue();
然后使用 javascript 运行它。在最简单的层面上,您可以这样做:
eval(code);
但是,你probably don't want to use eval()。相反,您可能会执行以下操作:
// grabbed from https://stackoverflow.com/questions/6432984/adding-script-element-to-the-dom-and-have-the-javascript-run
var script = document.createElement('script');
try {
script.appendChild(document.createTextNode(code));
document.body.appendChild(script);
} catch (e) {
script.text = code;
document.body.appendChild(script);
}
这会奏效。但是,它仍然会导致一些问题,因为那时用户代码可能会影响您的环境。在这种情况下,从安全角度来看,它可能并不可怕(除非用户可以共享他们的代码),但它会令人困惑。因此,您需要sandbox your code。
This answer explains sandboxing client side javascript,使用window.postMessage,您可以将 javascript 发送到沙盒 iframe 并在那里对其进行评估。
如果您希望将此服务器端引入并执行 Node 代码,则需要以不同的方式进行沙盒。 在服务器上,沙盒更令人担忧,因为用户可以使用 Javascript 做更多事情,并且可能与您的服务器进行恶意交互。幸运的是,有 a few sandboxes for Node that should help。