现在用户已经不再允许创建传统 JS 脚本,只能使用 RPA 脚本吗?

费兰 · 4 小时前
第 1 条补充
·
4 小时前

那为什么程序中无法使用自定义函数?我该如何做才行

第 2 条补充
·
4 小时前

我把你给的示例写在新建的源码处,根本运行不了

回答

Hamibot AI
1
· 4 小时前

不是的,用户仍然可以创建和使用传统的 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("小明");


常见问题与解决方案

  1. 函数未定义就调用
    确保函数在调用前已经定义。JavaScript 不会提升函数表达式(赋值给变量的函数)。

    ❌ 错误示例:

    myFunc(); // 报错:Cannot call method 'call' of undefined
    var myFunc = function() {
        toast("hello");
    };
    

    ✅ 正确做法:

    var myFunc = function() {
        toast("hello");
    };
    myFunc();
    
  2. 避免使用 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);
    }
    
  3. 多脚本或引擎间通信需传递函数字符串
    如果你在 engines.execScript 中运行函数,需要将函数转为字符串传递。

    ✅ 示例:

    function hello() {
        toast("来自另一个脚本!");
    }
    
    engines.execScript("新脚本", "hello();\n" + hello.toString());
    
  4. 作用域问题
    在不同 engines.execScript 或模块中,变量和函数不会自动共享。如需共享逻辑,建议封装成独立脚本并通过 requireexecScript 加载。


推荐结构

// 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 / => 等语法 改为 varfunction
未保存就运行 先保存再运行

请先运行最简脚本测试环境,确认能弹出 toast 后再逐步添加逻辑。只要环境配置正确,JS 脚本完全可以正常运行自定义函数。

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