kkevsekk1 / AutoX

A UiAutomator on android, does not need root access(安卓平台上的JavaScript自动化工具)
Other
7.8k stars 1.85k forks source link

使用脚本引擎执行脚本,在新的脚本中无法使用 require(),报错:Cannot call method "getResource" of null #633

Closed Le-u closed 10 months ago

Le-u commented 1 year ago
  1. Autox.js 版本:6.4.3
  2. Autox.js 下载渠道:https://github.com/kkevsekk1/AutoX/releases
  3. Android 版本:Android 13
  4. Android 机型:小米13p
  5. Android 系统类别:MIUI
  6. VSCODE Autox.js 扩展版本(可选,如果是连接电脑的问题需要填):
  7. 问题描述:使用脚本引擎执行脚本,在新的脚本中无法使用 require(),报错:Cannot call method "getResource" of null
  8. 报错日志(可选):
  9. 屏幕截图(可选):
  10. 目录:

main.js engines.execScriptFile('./newscript.js', { path: files.cwd() })

newscript.js const methodsObj = require('./utils/utils.js')

报错 Cannot call method "getResource" of null

Le-u commented 1 year ago

补充

文档中 path {Array} | {string} 指定脚本运行的目录。这些路径会用于 require 时寻找模块文件。 对于找图 images.read() 是可以使用的,require 无法使用

aiselp commented 1 year ago

经过测试一切正常,请检查错误是否由你模块中的代码抛出

Le-u commented 1 year ago

经过测试一切正常,请检查错误是否由你模块中的代码抛出

我刚刚又测了一遍,确实没问题,又排查了一遍在使用 HTML - JsBridge 时出现了问题,ui.web.jsBridge.registerHandler('AndroidStartScript', (data, callBack) => { engines.execScriptFile('./newscript.js') })engines.execScriptFile('./newscript.js') 放在监听函数外面,就可以使用 require()

aiselp commented 1 year ago

试了下这样确实会报错,因为回调执行的环境有些差异导致,可通过把代码放入ui.post或放入定时器中解决。有时间再优化一下

Zic-0445 commented 1 year ago

单独使用脚本引擎时同样会触发Error: Module "common" not found.问题

image


main.js内容如下:

events.broadcast.on("startRun", ()=>{toastLog("开始运行")})

setTimeout(()=>{
    log(require("common"))
},3000)
github-actions[bot] commented 10 months ago

此lssue由于长期未活动已被自动关闭,如问题任然存在,请重新打开lssue