现在用户已经不再允许创建传统 JS 脚本,只能使用 RPA 脚本吗?
那为什么程序中无法使用自定义函数?我该如何做才行
我把你给的示例写在新建的源码处,根本运行不了
回答
不是的,用户仍然可以创建和使用传统的 JS 脚本。Hamibot 并没有停止对传统 JS 脚本的支持。你可以在控制台中正常创建、编辑和运行以 .js 为后缀的脚本文件。
RPA 脚本是 Hamibot 提供的一种可视化流程自动化方案,适合不熟悉编程的用户使用。而传统的 JS 脚本则更适合需要编写自定义逻辑的开发者。两种脚本类型并行存在,适用于不同的使用场景。
你可以根据需求选择合适的脚本类型:
- 使用 JS 脚本进行灵活的代码开发,支持调用 Hamibot API 和第三方库。
- 使用 RPA 脚本通过拖拽方式构建自动化流程,降低入门门槛。
两者都可以在设备上正常运行,且享有相同的权限和执行环境。
如果你在创建 JS 脚本时遇到问题,请确认你操作的是“创建脚本”功能,并正确上传了 .js 文件。参考文档:创建脚本
补充回答 1
你可以在 Hamibot 的 JS 脚本中使用自定义函数,这是完全支持的。如果你遇到“无法使用自定义函数”的问题,通常是因为函数定义或调用的方式不符合 JavaScript 的语法规范,或者执行环境存在误解。
以下是一些正确使用自定义函数的方法和注意事项:
// 文档地址 https://docs.hamibot.com/
function add(a, b) {
return a + b;
}
function greet(name) {
toast("你好," + name);
}
// 调用函数
var result = add(3, 5);
toast("计算结果:" + result);
greet("小明");
常见问题与解决方案
-
函数未定义就调用
确保函数在调用前已经定义。JavaScript 不会提升函数表达式(赋值给变量的函数)。❌ 错误示例:
myFunc(); // 报错:Cannot call method 'call' of undefined var myFunc = function() { toast("hello"); };✅ 正确做法:
var myFunc = function() { toast("hello"); }; myFunc(); -
避免使用 ES6+ 语法
Hamibot 使用的是 Rhino 1.7.15 引擎,不支持箭头函数、let/const、默认参数等现代语法。❌ 不支持:
const add = (a, b) => a + b; function greet(name = "用户") { toast(name); }✅ 改为:
var add = function(a, b) { return a + b; }; function greet(name) { name = name || "用户"; toast(name); } -
多脚本或引擎间通信需传递函数字符串
如果你在engines.execScript中运行函数,需要将函数转为字符串传递。✅ 示例:
function hello() { toast("来自另一个脚本!"); } engines.execScript("新脚本", "hello();\n" + hello.toString()); -
作用域问题
在不同engines.execScript或模块中,变量和函数不会自动共享。如需共享逻辑,建议封装成独立脚本并通过require或execScript加载。
推荐结构
// main.js
// 文档地址 https://docs.hamibot.com/
auto();
// 工具函数定义
function clickCenter() {
var w = device.width;
var h = device.height;
click(w / 2, h / 2);
}
function waitForApp(pkgName, timeout) {
timeout = timeout || 5000;
var start = new Date().getTime();
while (currentPackage() !== pkgName) {
if (new Date().getTime() - start > timeout) {
return false;
}
sleep(200);
}
return true;
}
// 主逻辑
if (waitForApp("com.example.app", 10000)) {
clickCenter();
} else {
toast("未打开目标应用");
}
只要遵循 Rhino 1.7.15 的 JavaScript 语法限制,并确保函数定义和调用顺序正确,自定义函数是可以正常工作的。如果仍有问题,请检查具体报错信息,确认是语法错误还是运行时异常。
补充回答 2
你遇到的问题很可能是由于脚本缺少必要的前置声明或权限,导致无法正常运行。下面我会一步一步说明如何正确创建和运行一个基础 JS 脚本。
// 文档地址 https://docs.hamibot.com/
auto();
function add(a, b) {
return a + b;
}
function greet(name) {
toast("你好," + name);
}
var result = add(3, 5);
toast("计算结果:" + result);
greet("小明");
✅ 正确运行此脚本的步骤:
1. 确保开启 auto() 模式
- 这个脚本使用了
toast(),虽然它不依赖控件操作,但如果你后续要扩展功能(如点击、查找控件),必须启用自动化服务。 - 在脚本开头调用
auto()是安全且推荐的做法。 - 第一次运行时系统会提示你开启无障碍服务,请按提示开启。
2. 检查是否开启了无障碍权限
- 打开 Hamibot → 点击“设置”图标 → 查看“无障碍服务”是否已启用。
- 如果未开启,点击进入并授权。
- 不同手机品牌路径略有不同,可参考文档:打开权限
::: tip
如果打开了无障碍但仍无法运行,可能是系统杀掉了后台服务。建议关闭电池优化、开启自启动,并保持 Hamibot 在前台运行一段时间。
:::
3. 确认脚本保存并正确加载
- 新建脚本时,确保内容完整粘贴。
- 保存后从脚本列表点击运行,不要直接在编辑器里点“运行”按钮而未保存。
- 运行后观察控制台是否有错误日志输出。
4. 避免语法错误
- 不要使用 ES6+ 语法(如箭头函数、const、let)。
- 函数定义使用
function关键字或var fn = function() {}形式。 - 所有变量用
var声明。
5. 设备状态正常
- 设备未锁定屏幕(建议设置“不锁定屏幕”)。
- Hamibot 应用有悬浮窗权限(部分机型需要手动开启)。
最简测试脚本(用于验证环境)
你可以先尝试运行以下最简单的脚本来确认环境是否正常:
// 文档地址 https://docs.hamibot.com/
toast("Hello, Hamibot!");
sleep(1000);
toast("如果看到这条消息,说明脚本能正常运行");
✅ 如果这个脚本能弹出气泡,则说明你的 Hamibot 环境是正常的,问题出在之前的代码结构或权限上。
常见失败原因总结
| 问题 | 解决方法 |
|---|---|
无 auto() 导致部分 API 失效 |
添加 auto(); 到脚本第一行 |
| 无障碍未开启 | 进入设置开启无障碍服务 |
| 脚本被杀死 | 关闭省电模式、打开自启动 |
使用了 const / => 等语法 |
改为 var 和 function |
| 未保存就运行 | 先保存再运行 |
请先运行最简脚本测试环境,确认能弹出 toast 后再逐步添加逻辑。只要环境配置正确,JS 脚本完全可以正常运行自定义函数。