当前位置: 首页 > news >正文

自动化脚本中js如何导入或调用其它js脚本

在编写自动化脚本时,随着业务逻辑日趋复杂,将不同功能封装到独立的JS脚本中、实现模块化编程,已成为提升代码可维护性和复用性的关键手段。冰狐智能辅助平台为开发者提供了三种原生API来实现脚本之间的导入与调用,分别是import静态导入callScript同步调用runTask异步执行。本文将深入剖析这三种方法的使用方式、适用场景及注意事项。

一、import:静态导入,实现脚本的模块化复用

import是冰狐JS中实现静态脚本导入的核心语句,用于在当前脚本中引入其他脚本的全部逻辑与方法。被导入的脚本会在当前脚本执行前完成加载,适用于基础工具脚本的复用,如通用的时间格式化、设备判断、操作封装等场景。

1.1 语法与使用方式

冰狐JS的import语句语法非常简洁,无需复杂的模块导出机制,直接通过脚本路径或脚本名引入即可:

import '脚本路径/脚本名';

被导入的脚本中,所有通过var声明的变量和自定义函数,均可在当前脚本中直接使用。需要注意的是,若被导入的脚本包含main函数,该函数不会自动执行,需要手动调用,这一设计避免了导入时的逻辑冲突。

1.2 三种导入源

冰狐JS的import语句支持三种导入源,覆盖了线上、本地和APK资源三大场景:

(1)导入在线脚本

在线脚本指存储在冰狐智能辅助云端的脚本,只需通过脚本名即可导入,无需关注物理路径。这是团队协作中最常用的方式:

import 'test.js';

(2)导入APK资源中的脚本

在打包APK时,可以将多个JS文件添加到APK资源中,后续通过asset:前缀进行导入:

import 'asset:test.js';

(3)导入手机本地存储中的脚本

支持导入手机本地文件系统中的JS文件,使用绝对路径或相对路径均可:

import '/sdcard/test.js';

1.3 使用示例

假设有一个工具脚本test.js,其中定义了通用函数:

// test.js文件 function fun1() { console.log('func1'); }

在主脚本中通过import导入后,即可直接调用fun1函数:

import 'test.js'; function main() { console.log('main'); fun1(); // 直接调用test.js中的函数 }

二、callScript:动态同步调用,轻量级脚本执行

callScript是冰狐平台提供的动态调用函数,用于在当前脚本中执行其他JS脚本的main函数,其返回值为目标脚本的返回值。

2.1 核心特性

callScript不会创建独立的线程,直接在调用者的当前线程中同步执行。这一特性决定了它的适用场景:不能在UI代码中使用,否则可能导致界面无响应。在UI中执行耗时任务应使用runTask

2.2 支持的脚本源

与import一样,callScript同样支持三种脚本源:

function main() { // 在线脚本 callScript('test.js'); // APK资源中的脚本 callScript('asset:test.js'); // 手机本地存储中的脚本 callScript('/sdcard/test.js'); }

2.3 参数传递与返回值

callScript支持向目标脚本传递任意数量的参数,这些参数会直接透传给目标脚本的main函数:

// 调用脚本并传递参数 callScript('asset:test.js', 12, 'abc');

目标脚本通过main函数的参数接收:

// test.js文件 function main(id, name) { console.log('id:' + id + ' name:' + name); // 输出:id:12 name:abc }

callScript的返回值即为目标脚本main函数的返回值,这使得开发者可以在调用后获取执行结果,用于后续的逻辑判断。

2.4 典型应用场景

callScript适合轻量级的同步调用场景,例如在脚本中调用另一个脚本完成某个独立的子任务,并获取其返回结果。在实际项目中,可以将不同手机品牌的适配逻辑封装为独立脚本,通过callScript动态调用:

callScript(getManufacturer() + '_install_app');

这样在小米手机上会自动执行Xiaomi_install_app脚本,在华为手机上执行Huawei_install_app脚本,实现优雅的设备适配。

三、runTask:异步执行,UI场景的专用方案

runTask是冰狐平台专门用于在UI代码中执行脚本的函数,调用时会另外开启一个独立线程来执行目标脚本。

3.1 与callScript的核心区别

runTaskcallScript最大的区别在于线程模型

  • callScript:在当前线程中同步执行,会阻塞调用者

  • runTask:开启新线程异步执行,不阻塞调用者

因此,若在非UI代码中调用脚本,应使用callScript;在UI代码中执行可能耗时的脚本任务,必须使用runTask以避免界面卡顿。

3.2 使用方式

runTask的语法与callScript完全一致,同样支持三种脚本源和参数传递:

// 在线脚本 runTask('test'); // 手机本地绝对路径 runTask('/sdcard/test.js'); // 手机本地相对路径 runTask('test.js'); // APK资源中的脚本,带参数 runTask('asset:test.js', 12, 'abc');

目标脚本的写法与callScript相同,通过main函数接收参数。

3.3 适用场景

runTask多用于自定义UI任务中执行后台脚本。当用户在UI界面点击一个按钮触发自动化任务时,应当使用runTask在新线程中执行,确保UI界面保持流畅响应。若直接在UI线程中使用callScript执行耗时操作,手机系统可能会频频提示"无响应"。

四、实践建议与总结

在实际开发中,合理选择脚本调用方式至关重要。以下是几点实践建议:

1. 模块化优先使用import。对于通用的工具函数库、常量定义等基础模块,使用import静态导入是最佳选择。它在一开始就完成加载,调用时无需额外开销,代码结构清晰,便于维护。

2. 动态调用首选callScript。当需要在运行时根据条件决定调用哪个脚本、或者需要获取被调用脚本的返回值时,使用callScript。但切记不要在UI代码中使用

3. UI场景必须用runTask。凡是涉及用户界面交互、且需要执行脚本的场景,一律使用runTask开启新线程执行,避免UI阻塞。

4. 注意脚本命名与路径规范。在线脚本直接使用脚本名;APK资源中的脚本使用asset:前缀;本地文件使用绝对路径或相对路径。

5. 理解main函数的入口角色。所有冰狐JS脚本均以main函数为默认入口,外部调用脚本时本质是执行目标脚本的main函数。main函数的返回值即为脚本的执行返回值,且支持为main函数设置参数。

冰狐智能辅助平台通过importcallScriptrunTask三种原生API,为开发者提供了从静态导入到动态调用、从同步执行到异步执行的完整脚本复用方案。掌握这三种方法的特性与适用场景,是编写高质量、可维护的自动化脚本的基础。

http://www.cnnetsun.cn/news/3542890.html

相关文章:

  • 我把向量数据库从 Milvus 切到 pgvector 后,检索 P99 从 230ms 压到 18ms:这 4 个取舍要注意
  • 用群晖给 ESXi 自动续期 Let‘s Encrypt 证书:三个官方文档没写的坑
  • 一文读懂PARD2-Llama-3.1-8B的Confidence-Adaptive Token技术:提升模型接受率的关键
  • ReAct 和 Plan and Solve 理解
  • 【Bug已解决】macOS detects Codex Computer Use.app as malware and deletes it! 解决方案
  • 鸿蒙Flutter Center与Align:组件对齐方式
  • 如何用Path of Building 2精准规划PoE2角色构建?3大核心功能深度解析
  • 逆变器芯片失效分析与防护设计实践
  • AI数据基础设施预计有1984亿规模?爱分析拆解七大细分市场构成
  • 163MusicLyrics:跨平台云音乐歌词获取与处理工具的深度解析
  • 旧款Mac免费升级macOS终极指南:用OpenCore Legacy Patcher重获新生
  • Markdown-Edit终极指南:Windows平台最简洁的Markdown编辑器完全解析
  • git-pr-release安全配置:保护你的GitHub Token和API访问完整指南
  • Codex全套科研技能汇总
  • React Native 跨平台图片浏览器开发:iOS 与 Android 兼容性指南
  • 如何3分钟打造专业级foobar2000美化方案:终极视觉与功能升级指南
  • C++字符编码转换实战:libiconv解决乱码问题
  • 成都网站建设木木科技:踩坑无数后,我为什么最终选了这家?
  • 怎么在网站上建设投票统计:从混乱到清晰的实战指南
  • 网站建设四段合一:告别割裂式开发,一次搞定设计与落地
  • 营销网站建设都是专业技术人员吗?别被忽悠了,这行水很深
  • Avalonia:3个核心模块实现跨平台.NET桌面应用的终极解决方案
  • Mac Mouse Fix:让你的普通鼠标在macOS上超越苹果触控板的终极方案
  • ISO 13355:2016是什么标准,ISO 13355随机振动试验包装测试
  • 075、语义分割驱动的局部调优:场景感知的影像增强
  • 数据库的概述--常用SQL命令
  • Runway官方未公布的12个生产力捷径:Ctrl+Shift+X触发的隐藏功能,仅限Beta测试者知晓
  • AI接口熔断与重试机制实战:Spring Retry与Sentinel应用
  • 进阶 XXE 漏洞攻防:从基础探测到高阶利用,附防御修复思路
  • VSCode配置python虚拟环境路径