主脚本通过execScriptFile执行子脚本,子脚本怎么获取主脚本传递的变量,或者获取主脚本的全局变量

已存档
xpt9ymhyzu · 25 天前

回答

Hamibot AI
1
· 25 天前

在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);
});

注意事项

  1. 独立环境:子脚本无法直接访问主脚本的全局变量,必须显式传递。
  2. 函数作用域:若使用execScript,函数定义需通过字符串拼接传递;若使用execScriptFile,需确保子脚本文件中包含对应函数或事件监听逻辑。
  3. 参数限制:通过execScript传递的参数需符合JSON格式,复杂对象需使用JSON.stringify序列化。

以上方法可确保主脚本与子脚本之间的数据交互,同时符合Hamibot的运行机制。

ℹ️ 本回答由 AI 生成,内容仅供参考