回答
在Hamibot中,主脚本通过engines.execScriptFile
执行子脚本时,由于子脚本在独立的脚本环境中运行,无法直接访问主脚本的全局变量。但可以通过以下两种方式传递变量:
方法1:通过函数参数显式传递
主脚本将变量封装到函数调用中,子脚本定义对应函数接收参数。
主脚本示例:
// 主脚本
var args = { a: 1, b: 2 };
// 将参数序列化为字符串,并拼接子脚本函数定义
var script = 'add(' + JSON.stringify(args) + ');\n' + add.toString();
engines.execScript("sub_script", script);
// 定义要传递的函数
function add(args) {
toast("子脚本收到参数: " + args.a + ", " + args.b);
}
子脚本示例(需手动写入文件):
// sub_script.js
function add(args) {
// 直接使用主脚本传递的参数
toast("子脚本处理: " + args.a + " + " + args.b);
}
方法2:通过事件通信传递
主脚本通过emit
发送数据,子脚本监听事件接收数据。
主脚本示例:
// 主脚本
var e = engines.execScriptFile("./sub.js");
// 等待子脚本启动
sleep(1000);
// 发送事件数据
e.getEngine().emit("data_event", { a: 3, b: 4 });
子脚本示例(需手动写入文件):
// sub.js
events.on("data_event", function(data) {
toast("子脚本收到事件数据: " + data.a + ", " + data.b);
});
注意事项
- 独立环境:子脚本无法直接访问主脚本的全局变量,必须显式传递。
- 函数作用域:若使用
execScript
,函数定义需通过字符串拼接传递;若使用execScriptFile
,需确保子脚本文件中包含对应函数或事件监听逻辑。 - 参数限制:通过
execScript
传递的参数需符合JSON格式,复杂对象需使用JSON.stringify
序列化。
以上方法可确保主脚本与子脚本之间的数据交互,同时符合Hamibot的运行机制。
ℹ️ 本回答由 AI 生成,内容仅供参考