我在我的页面上使用
ACE Editor作为我的文本编辑器,用户将输入代码.
>我希望尽可能执行用户在浏览器上或浏览器中输入的代码.如何从编辑器获取输入并使用Browsers V8 JavaScript编译器?
>然后我将尝试在Node.js上运行它,但首先我必须学习Node :).
解决方法
使用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并在那里进行评估.
如果您希望使用此服务器端并执行节点代码,则需要以不同方式执行沙盒操作.在服务器上,沙盒是一个更令人担忧的问题,因为用户可以使用Javascript做更多事情并且可能恶意地与您的服务器进行交互.幸运的是,有a few sandboxes for Node that should help.