Skip to content

JS 变量和函数

Legado 使用 Rhino v1.8.0 作为 JavaScript 引擎,支持在源规则中调用 Java 类和方法。本文档列出所有可用的内置变量、对象属性和扩展函数。

1. Rhino 引擎概览

构造函数函数调用类说明
JavaImporterimportClass importPackageImporterTopLevel导入 Java 类到 JavaScript
getClassNativeJavaTopPackage默认导入 JavaScript 中的 Java 类
JavaAdapterJavaAdapter继承 Java 类

注意事项

  • java 变量已被 Legado 修改,调用 java.* 下的包请使用 Packages.java.*
  • 在源规则中使用 @js<js>{{}} 可调用 Legado 内置的类和方法
  • 为安全起见,部分 Java 类调用被屏蔽,见 RhinoClassShutter
  • 不同源规则中支持调用的 Java 类和方法可能不同
  • const 声明的变量不支持块级作用域,循环中使用会出现值不变的问题,请改用 var

2. 内置变量 (Built-in Variables)

以下变量在源规则的 JS 执行环境中自动可用。

变量类型作用域说明
javaObject全局扩展工具对象,提供网络请求、加解密、文件操作等方法
baseUrlString全局当前请求的 URL
resultAny全局上一步规则的执行结果
bookBook全局书籍对象
rssArticleRssArticle全局RSS 文章对象
chapterBookChapter全局章节对象
sourceBaseSource全局源对象
cookieCookieStore全局Cookie 操作对象
cacheCacheManager全局缓存操作对象
titleString全局当前章节标题
srcString全局请求返回的源码
nextChapterUrlString全局下一章节 URL

3. java 对象方法

java 对象是 Legado 暴露给 JS 环境的核心工具对象,聚合了多个扩展类的方法。

3.1 RSS 扩展 (RssJsExtensions)

作用域限制

只能在订阅源 shouldOverrideUrlLoading 规则中使用。URL 跳转拦截规则不能执行耗时操作。

js
java.searchBook(bookName: String)  // 调用 Legado 搜索
java.addBook(bookUrl: String)      // 添加书架

3.2 URL 解析 (AnalyzeUrl)

通过 java. 调用,仅在 登录检查 JS 规则中有效。

方法返回值说明
initUrl()重新解析 URL
getHeaderMap().putAll(source.getHeaderMap(true))重新设置登录头
getStrResponse(jsStr, sourceRegex)StrResponse返回文本类型的访问结果
getResponse()Response返回 Response 类型的访问结果

3.3 规则解析 (AnalyzeRule)

js
// 获取文本/文本列表
java.getString(ruleStr: String?, mContent: Any? = null, isUrl: Boolean = false)
java.getStringList(ruleStr: String?, mContent: Any? = null, isUrl: Boolean = false)

// 设置解析内容
java.setContent(content: Any?, baseUrl: String? = null)

// 获取 Element/Element 列表
java.getElement(ruleStr: String)
java.getElements(ruleStr: String)

// 重新搜索书籍/重新获取目录 url(只能在刷新目录之前使用)
java.reGetBook()
java.refreshTocUrl()

// 变量存取
java.get(key)
java.put(key, value)

3.4 扩展工具 (JsExtensions)

链接解析

方法返回值说明
java.toURL(url)JsURL将字符串解析为 URL 对象
java.toURL(url, baseUrl)JsURL基于 baseUrl 解析相对 URL
java.getWebViewUA()String获取 WebView User-Agent

网络请求

方法返回值说明
java.ajax(urlStr)StringGET 请求,返回响应体
java.ajaxAll(urlList)Array<StrResponse>批量请求
java.connect(urlStr)StrResponse返回 body() code() message() headers() raw() toString()
java.post(url, body, headerMap)Connection.ResponsePOST 请求
java.get(url, headerMap)Connection.ResponseGET 请求
java.head(url, headerMap)Connection.ResponseHEAD 请求
java.webView(html, url, js)String?使用 WebView 访问网络
java.webViewGetOverrideUrl(html, url, js, overrideUrlRegex)String?使用 WebView 获取跳转 URL
java.webViewGetSource(html, url, js, sourceRegex)String?使用 WebView 获取资源 URL
java.startBrowser(url, title)使用内置浏览器打开链接
java.startBrowserAwait(url, title, refetchAfterSuccess)StrResponse使用内置浏览器打开链接,等待结果

调试与提示

方法说明
java.log(msg)输出日志
java.logType(var)输出变量类型
java.getVerificationCode(imageUrl)弹出验证码输入框
java.longToast(msg)长时间提示
java.toast(msg)短时间提示

脚本导入

方法说明
java.importScript(url)从网络加载脚本
java.importScript(relativePath)从相对路径加载(支持 android/data/{package}/cache
java.importScript(absolutePath)从绝对路径加载

文件缓存

js
java.cacheFile(url)              // 缓存网络文件
java.cacheFile(url, saveTime)    // 缓存并指定保存时间
eval(String(java.cacheFile(url)))  // 缓存并执行
cache.delete(java.md5Encode16(url))  // 使缓存失效

编码与转换

分类方法说明
URIjava.encodeURI(str, enc?)URI 编码,默认 UTF-8
Base64java.base64Decode(str, charset?)Base64 解码为字符串
Base64java.base64DecodeToByteArray(str, flags)Base64 解码为 ByteArray
Base64java.base64Encode(str, flags)Base64 编码
ByteArrayjava.strToBytes(str, charset?)字符串转 ByteArray
ByteArrayjava.bytesToStr(bytes, charset?)ByteArray 转字符串
Hexjava.hexDecodeToByteArray(hex)Hex 解码为 ByteArray
Hexjava.hexDecodeToString(hex)Hex 解码为字符串
Hexjava.hexEncodeToString(utf8)字符串转 Hex

标识与格式化

方法返回值说明
java.randomUUID()String生成 UUID
java.androidId()String获取 Android ID
java.t2s(text)String繁体转简体
java.s2t(text)String简体转繁体
java.timeFormatUTC(time, format, sh)String?UTC 时间格式化
java.timeFormat(time)String时间格式化
java.htmlFormat(str)StringHTML 格式化

文件操作

路径限制

所有文件读写删除操作均使用相对路径,只能操作阅读缓存目录 android/data/{package}/cache/ 内的文件。

方法返回值说明
downloadFile(url)String文件下载,返回文件路径
unArchiveFile(zipPath)String文件解压,返回解压路径
unzipFile(zipPath)StringZIP 解压
unrarFile(zipPath)StringRAR 解压
un7zFile(zipPath)String7Z 解压
getTxtInFolder(unzipPath)String读取文件夹内所有文件
readTxtFile(path)String读取文本文件
deleteFile(path)删除文件

外部链接跳转

方法说明
java.openUrl(url)跳转外部链接(HTTP 或 scheme)
java.openUrl(url, mimeType)指定 MIME 类型跳转,如 video/*

3.5 加解密 (JsEncodeUtils)

提供在 JavaScript 环境中快捷调用 crypto 算法的函数,由 hutool-crypto 实现(当前版本 5.8.22)。

输入类型

如果输入参数不是 Utf8String,可先调用 java.hexDecodeToByteArrayjava.base64DecodeToByteArray 转成 ByteArray。

对称加密

js
// 创建 Cipher,key/iv 支持 ByteArray | Utf8String
java.createSymmetricCrypto(transformation, key, iv)

// data 支持 ByteArray | Base64String | HexString | InputStream
cipher.decrypt(data)          // 解密为 ByteArray
cipher.decryptStr(data)       // 解密为字符串
cipher.encrypt(data)          // 加密为 ByteArray
cipher.encryptBase64(data)    // 加密为 Base64
cipher.encryptHex(data)       // 加密为 Hex

非对称加密

js
java.createAsymmetricCrypto(transformation)
  .setPublicKey(key)
  .setPrivateKey(key)

cipher.decrypt(data, usePublicKey: Boolean? = true)
cipher.decryptStr(data, usePublicKey: Boolean? = true)
cipher.encrypt(data, usePublicKey: Boolean? = true)
cipher.encryptBase64(data, usePublicKey: Boolean? = true)
cipher.encryptHex(data, usePublicKey: Boolean? = true)

签名

js
java.createSign(algorithm)
  .setPublicKey(key)
  .setPrivateKey(key)

sign.sign(data)
sign.signHex(data)

摘要与 HMAC

方法返回值说明
java.digestHex(data, algorithm)String?摘要(Hex)
java.digestBase64Str(data, algorithm)String?摘要(Base64)
java.md5Encode(str)StringMD5(32 位)
java.md5Encode16(str)StringMD5(16 位)
java.HMacHex(data, algorithm, key)StringHMAC(Hex)
java.HMacBase64(data, algorithm, key)StringHMAC(Base64)

4. book 对象

在 JS 中或 {{}} 中使用 book.属性 的方式获取。

属性类型说明
bookUrlString详情页 URL(本地源为完整文件路径)
tocUrlString目录页 URL
originString源 URL
originNameString源名称或本地书籍文件名
nameString书籍名称
authorString作者名称
kindString分类信息
customTagString分类信息(用户修改)
coverUrlString封面 URL
customCoverUrlString封面 URL(用户修改)
introString简介内容
customIntroString简介内容(用户修改)
charsetString自定义字符集名称(仅本地书籍)
typeInt0: text, 1: audio
groupInt自定义分组索引号
latestChapterTitleString最新章节标题
latestChapterTimeLong最新章节更新时间
lastCheckTimeLong最近一次更新书籍信息的时间
lastCheckCountInt最近一次发现新章节数量
totalChapterNumInt书籍目录总数
durChapterTitleString当前章节名称
durChapterIndexInt当前章节索引
durChapterPosLong当前阅读进度
durChapterTimeLong最近一次阅读时间
canUpdateBoolean刷新书架时是否更新
orderInt手动排序
originOrderInt源排序
variableString?自定义书籍变量

5. chapter 对象

属性类型说明
urlString章节地址
titleString章节标题
baseUrlString用于拼接相对 URL
bookUrlString书籍地址
indexInt章节序号
resourceUrlString音频真实 URL
tagString标签
startLong章节起始位置
endLong章节终止位置
variableString?变量

6. source 对象

方法返回值说明
source.getKey()String获取源 URL
source.setVariable(variable)设置源变量
source.getVariable()String?获取源变量
source.getLoginHeader()String?获取登录头
source.getLoginHeaderMap().get(key)String?获取登录头某一键值
source.putLoginHeader(header)保存登录头
source.removeLoginHeader()清除登录头
source.getLoginInfo()String?获取登录信息
source.getLoginInfoMap().get(key)String?获取登录信息键值
source.removeLoginInfo()清除登录信息
方法返回值说明
cookie.getCookie(url)String获取全部 cookie
cookie.getKey(url, key)String?获取某一键值
cookie.setCookie(url, cookie)设置 cookie
cookie.replaceCookie(url, cookie)替换 cookie
cookie.removeCookie(url)删除 cookie

8. cache 对象

saveTime 单位:秒,可省略。保存至数据库和缓存文件(50MB),内容较大时请使用 getFile / putFile

方法返回值说明
cache.put(key, value, saveTime?)保存到数据库
cache.get(key)String?从数据库读取
cache.delete(key)删除数据库缓存
cache.putFile(key, value, saveTime?)缓存文件内容
cache.getFile(key)String?读取文件缓存
cache.putMemory(key, value)保存到内存
cache.getFromMemory(key)Any?从内存读取
cache.deleteMemory(key)删除内存缓存

基于 Apache-2.0 许可发布