Skip to content

API 参考

Legado Tauri 书源引擎通过 legado.* 命名空间向脚本注入宿主 API。凡是涉及 I/O 的宿主能力(HTTP、哈希、加解密等)均返回 Promise,推荐统一使用 async / await

同步 API(Tauri/Boa 引擎专属):Boa 引擎内部 HTTP 和加密本质上都是同步阻塞执行的,额外暴露了不带 await*Sync 变体。如果书源在 HarmonyOS/移动端运行,请继续使用 await 异步版本;Tauri 桌面端两种写法均支持。详见 同步 API 说明

API 分类总览

HTTP 请求

API说明
legado.http.get(url, headers?)异步 GET,请 await
legado.http.getSync(url, headers?)同步 GET,直接返回文本,无需 await(Tauri 专属)
legado.http.post(url, body, headers?)异步 POST,请 await
legado.http.postSync(url, body, headers?)同步 POST,直接返回文本,无需 await(Tauri 专属)
legado.http.request(options)兼容层统一 HTTP 接口,返回响应文本
legado.http.requestSync(options)同步 兼容层 HTTP 接口(Tauri 专属)
legado.http.postBinary(url, base64Body, headers?)异步二进制 POST
legado.http.batchGet(urls, headers?, concurrency?)并发批量 GET
legado.http.getBinarySync(url, headers?)同步二进制 GET,返回 base64(Tauri 专属)
legado.http.getBinary(url, headers?)同上,不带 Sync 后缀的别名
fetch(input, init?)浏览器风格请求接口(全局注入)

DOM 解析

API说明
legado.dom.parse(html)解析 HTML → 文档句柄
legado.dom.select(handle, sel)CSS 选择首个匹配
legado.dom.selectAll(handle, sel)CSS 选择全部匹配
legado.dom.text(handle)获取元素全部文本
legado.dom.html(handle)获取 innerHTML
legado.dom.attr(handle, name)获取属性值
legado.dom.selectText(handle, sel)快捷:select + text
legado.dom.selectAttr(handle, sel, attr)快捷:select + attr
legado.dom.selectAllTexts(handle, sel)快捷:selectAll + text
legado.dom.selectAllAttrs(handle, sel, attr)快捷:selectAll + attr
legado.dom.selectByText(handle, text)按文本查找元素
legado.dom.remove(handle, sel)移除匹配元素
legado.dom.free(handle)释放文档句柄
legado.dom2.*对象风格 DOM 兼容层(Tauri 兼容入口)

编码与加密

API说明
btoa(str) / atob(str)Base64 编解码(标准 JS)
encodeURIComponent(str) / decodeURIComponent(str)URL 编解码(标准 JS)
legado.urlEncodeCharset(str, charset)指定字符集 URL 编码(GBK 等)
legado.urlEncodeCharsetSync(str, charset)同步指定字符集 URL 编码(Tauri 专属)
legado.htmlEncode(str) / htmlDecode(str)HTML 实体编解码
legado.htmlEncodeSync(str) / legado.htmlDecodeSync(str)同步 HTML 实体编解码(Tauri 专属)
legado.md5(str)异步 MD5 哈希
legado.md5Sync(str)同步 MD5 哈希(Tauri 专属)
legado.sha1(str) / sha256(str)异步 SHA 哈希
legado.sha1Sync(str) / legado.sha256Sync(str)同步 SHA 哈希(Tauri 专属)
legado.hmacSha256Sync(data, key)同步 HMAC-SHA256(Tauri 专属)
legado.aesEncrypt(...) / aesDecrypt(...)异步 AES 加解密
legado.aesEncryptSync(...) / legado.aesDecryptSync(...)同步 AES 加解密(Tauri 专属)
legado.desEncrypt(...) / desDecrypt(...)异步 DES 加解密
legado.desEncryptSync(...) / legado.desDecryptSync(...)同步 DES 加解密(Tauri 专属)
legado.gzip(str) / legado.gzipSync(str)同步 gzip 压缩字符串 → base64(Tauri 专属)
legado.gunzip(base64) / legado.gunzipSync(base64)同步 gzip 解压 base64 → 字符串(Tauri 专属)
legado.gzipBytes(base64) / legado.gzipBytesSync(base64)同步 gzip 压缩字节 → base64(Tauri 专属)
legado.gunzipBytes(base64) / legado.gunzipBytesSync(base64)同步 gzip 解压字节 → base64(Tauri 专属)
legado.t2s(text) / legado.t2sSync(text)同步 繁体→简体(Tauri 专属)
legado.s2t(text) / legado.s2tSync(text)同步 简体→繁体(Tauri 专属)
legado.queryTTF(base64) / legado.queryTTFSync(base64)同步 字体反爬映射(路径哈希法),返回 JSON(Tauri 专属)
legado.queryTTFByName(base64) / legado.queryTTFByNameSync(base64)同步 字体反爬映射(glyph-name 法),返回 JSON(Tauri 专属)
legado.wasm.*Wasm 扩展:数字 ABI 与 JSON ptr-len ABI

同步 API 说明

Boa 引擎中所有 HTTP 请求和加密操作本质上都是同步阻塞执行的(HTTP 使用 reqwest blocking,加密是纯 CPU 计算)。await 风格是为了与 HarmonyOS 端保持接口一致而引入的 Promise 包装层。

同步写法示例(仅 Tauri/Boa 可用):

js
// 无需 async function,直接调用
const html = legado.http.getSync("https://example.com");
const hash = legado.md5Sync("hello world");
const cipher = legado.aesEncryptSync(data, key, iv);

跨平台兼容写法(推荐):

js
// 在 async 函数中使用 await,Tauri 和 HarmonyOS 均支持
async function getChapter(url) {
  const html = await legado.http.get(url);
  return html;
}

注意*Sync 系列函数在 HarmonyOS / 移动端不可用,仅适用于 Tauri 桌面客户端。 新书源建议使用 await 异步风格以保持跨平台兼容性; 老书源或需要在非 async 函数顶层直接调用时,可使用 Sync 变体。

浏览器探测

API说明
legado.browser.acquire(role, options?)推荐:按角色获取/复用会话,引擎自动管理生命周期
legado.browser.create(options?)创建探测会话(底层,非必要不使用)
legado.browser.navigate(id, url, options?)导航到 URL
legado.browser.eval(id, code, options?)执行页面 JS
legado.browser.run(url, code, options?)一次性导航 + 执行
legado.browser.html(id) / text(id) / url(id)读取页面内容
legado.browser.cookies(url?) / getCookie(domain, name)读取 Cookie
legado.browser.postMessage/request/waitMessageBoa 与探测页面双向通信
legado.browser2.acquire(role, options?)对象风格 acquire,返回 BrowserSession

图片处理

API说明
legado.image.decode(base64)解码图片 → 句柄
legado.image.create(w, h)创建空白图片
legado.image.width(handle)获取宽度
legado.image.height(handle)获取高度
legado.image.crop(handle, x, y, w, h)裁剪
legado.image.paste(dest, src, x, y)粘贴
legado.image.copyRegion(src, dest, sx, sy, w, h, dx, dy)区域复制
legado.image.encode(handle, format?)编码为 base64
legado.image.free(handle)释放句柄
legado.image.qrCode(text, size?)生成二维码 → 句柄
legado.image.qrCodeDataUrl(text, size?)生成二维码 data URL
legado.image.jmDecode(srcHandle, num)禁漫条带还原

设备标识

API说明
legado.runtime.getMachineUid()返回 Promise<string>:优先获取系统硬件 UID(重装软件不变),不可用时自动回落到软 UUID
legado.runtime.getMachineUUID()返回 Promise<string>:始终返回应用本地软 UUID(卸载/清数据后重置)

硬件 UID:与操作系统/硬件绑定,重装软件后不变。 软 UUID:存于应用数据目录(app_state.redb),卸载清除数据后重置。

文本压缩

Tauri 引擎内置 gzip 压缩/解压,对应 Android 书源 Packages.ZipUtil.gzip

详细说明与示例见 文本压缩(gzip)

js
const compressed = legado.gzip("Hello, World!");
const text = legado.gunzip(compressed);

繁简转换

基于 zhconv(MediaWiki 规则集)提供繁简互转,对应 Android 书源 java.t2s / java.s2t

详细说明与示例见 繁简转换(t2s / s2t)

js
legado.t2s("繁體中文"); // → "繁体中文"
legado.s2t("繁体中文"); // → "繁體中文"

字体反爬

部分站点使用自定义 TTF 字体混淆字符。Tauri 引擎提供两种还原策略,对应不同强度的混淆。

详细原理、两种策略对比与完整示例见 字体反爬(queryTTF / queryTTFByName)

js
const fontB64 = legado.http.getBinary(fontUrl);
// 低强度混淆优先
let map = JSON.parse(legado.queryTTFByName(fontB64));
// 空映射则 fallback 路径哈希法
if (!Object.keys(map).length) map = JSON.parse(legado.queryTTF(fontB64));
const fix = (t) => t.replace(/./g, (c) => map[c] || c);

compat 层自动支持:老 Android 书源的 java.queryTTF / java.queryBase64TTF / java.replaceFont 会自动代理,无需修改书源。

其他

API说明
legado.log(msg)打印日志
legado.toast(msg)显示通知
legado.sleep(ms)同步阻塞延迟(不需要 await)
legado.config.read(scope, key)读取配置
legado.config.write(scope, key, value)写入配置
legado.config.readBytes(scope, key)读取字节数组配置
legado.config.writeBytes(scope, key, bytes)写入字节数组配置
legado.ui.emit(event, data)推送 UI 事件

运行时信息

API说明
legado.runtime.platform运行平台("tauri"
legado.runtime.engineJS 引擎名称("boa"
legado.runtime.os操作系统("windows" / "android" / …)
legado.runtime.has(name)检测某项能力是否可用
legado.runtime.getMachineUid()获取硬件 UID(重装不变)
legado.runtime.getMachineUUID()获取软 UUID(清数据后重置)

数据结构

类型说明
BookItem搜索、发现和书籍详情返回结构
ChapterInfochapterList() 返回的章节结构,支持 vip 标记
PurchaseChapterResultpurchaseChapter() 推荐返回结构

基于 MIT 许可发布