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 可用):
// 无需 async function,直接调用
const html = legado.http.getSync("https://example.com");
const hash = legado.md5Sync("hello world");
const cipher = legado.aesEncryptSync(data, key, iv);跨平台兼容写法(推荐):
// 在 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/waitMessage | Boa 与探测页面双向通信 |
legado.browser2.acquire(role, options?) | 对象风格 acquire,返回 BrowserSession |
图片处理
设备标识
| 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)。
const compressed = legado.gzip("Hello, World!");
const text = legado.gunzip(compressed);繁简转换
基于 zhconv(MediaWiki 规则集)提供繁简互转,对应 Android 书源 java.t2s / java.s2t。
详细说明与示例见 繁简转换(t2s / s2t)。
legado.t2s("繁體中文"); // → "繁体中文"
legado.s2t("繁体中文"); // → "繁體中文"字体反爬
部分站点使用自定义 TTF 字体混淆字符。Tauri 引擎提供两种还原策略,对应不同强度的混淆。
详细原理、两种策略对比与完整示例见 字体反爬(queryTTF / queryTTFByName)。
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.engine | JS 引擎名称("boa") |
legado.runtime.os | 操作系统("windows" / "android" / …) |
legado.runtime.has(name) | 检测某项能力是否可用 |
legado.runtime.getMachineUid() | 获取硬件 UID(重装不变) |
legado.runtime.getMachineUUID() | 获取软 UUID(清数据后重置) |
数据结构
| 类型 | 说明 |
|---|---|
BookItem | 搜索、发现和书籍详情返回结构 |
ChapterInfo | chapterList() 返回的章节结构,支持 vip 标记 |
PurchaseChapterResult | purchaseChapter() 推荐返回结构 |
