如何从文本输入计算JavaScript函数

如何从文本输入计算JavaScript函数,javascript,parsing,three.js,Javascript,Parsing,Three.js,我有一个运行在THREE.js中的浏览器内粒子引擎。我想添加动画功能,因此我有一个包含代码的文本输入,应该从我的“animate”函数调用它,该函数更新粒子发射器的位置和其他信息。 function animate(){ 时间=日期。现在(); 运行CustomAnimateScript(); 对于(var i=0;i{ e、 预防默认值(); 常量脚本=document.createElement(“脚本”); script.innerHTML=document.querySelector(

我有一个运行在THREE.js中的浏览器内粒子引擎。我想添加动画功能,因此我有一个包含代码的文本输入,应该从我的“animate”函数调用它,该函数更新粒子发射器的位置和其他信息。

function animate(){
时间=日期。现在();
运行CustomAnimateScript();
对于(var i=0;i
目前,我无法将此文本输入转换为可执行的JavaScript函数。我感到惊讶的是,以前没有人尝试过这样做,或者至少没有人发布过这样的消息?

评估任意代码的旧方法是使用该方法

更好的方法是使用,但支持可能有限

function runCustomAnimateScript(){
   const sandbox = new Components.utils.Sandbox("http://www.your-url.com/");
   let result = Components.utils.evalInSandbox(document.querySelectorAll("textarea[name='customAnimateScript']").value , sandbox);
}

为完整起见,另一种方法是创建
标记,将脚本主体设置为用户代码,并将脚本附加到DOM:

document.querySelector(“按钮”).addEventListener(“单击”,e=>{
e、 预防默认值();
常量脚本=document.createElement(“脚本”);
script.innerHTML=document.querySelector(“textarea”).value;
document.body.appendChild(脚本);
document.body.removeChild(脚本);
});
textarea{
宽度:500px;
高度:10公分;
}
Run
我很惊讶,以前没有人尝试过这么做,这几乎就是我所做的。问题是,执行这样的代码可能有点危险,特别是当您评估可能来自其他用户的代码时,比如如果您将留言板签名评估为JavaScript。确保只运行用户提供的代码。
function runCustomAnimateScript(){
   const sandbox = new Components.utils.Sandbox("http://www.your-url.com/");
   let result = Components.utils.evalInSandbox(document.querySelectorAll("textarea[name='customAnimateScript']").value , sandbox);
}