如何在JavaScript中以字符串形式执行脚本?含Emscripten场景示例
在JavaScript中以字符串形式执行脚本的可行性及实现方法
这种实现方式是可行的,JavaScript原生提供了多种执行字符串形式脚本的能力,下面结合你的Emscripten场景给出具体实现方案:
实现方案
1. 使用eval()函数
eval()可以直接解析并执行字符串形式的JavaScript代码,适配你的场景的修改示例如下:
// core.jslib mergeInto(LibraryManager.library, { myCallback: function (str, arg) { // 将字符串函数表达式转为可执行的函数对象 const execFunc = eval(`(${str})`); // 转换Emscripten传入的C字符串为JS字符串后执行函数 execFunc(UTF8ToString(arg)); } });
2. 使用new Function()构造函数
这种方式相比eval()有更好的作用域隔离性,安全性略高,实现示例:
// core.jslib mergeInto(LibraryManager.library, { myCallback: function (str, arg) { // 通过构造函数获取字符串对应的函数 const execFunc = new Function('return ' + str)(); execFunc(UTF8ToString(arg)); } });
注意事项
- 安全风险:如果执行的字符串脚本来自不可信的外部输入,极易引发代码注入或XSS攻击,必须确保脚本来源完全可靠。
- Emscripten字符串处理:从C层传入的
arg是UTF8编码的指针,必须通过UTF8ToString()转换为JavaScript字符串后再传递给目标函数。 - 函数格式兼容:你传入的
script是函数表达式字符串,需要通过括号包裹(eval方式)或借助new Function返回函数对象,才能正确被解析为可执行的函数。
内容的提问来源于stack exchange,提问作者Spiegel
相关产品推荐
相关产品推荐

