Mirv Extension 基类的核心方法
基类的设计思想
Mirv 的 Extension 基类把扩展需要实现的能力抽成了一组生命周期方法。你继承它之后,重写你需要的方法,不需要的方法留空(基类有默认空实现)。
export default class extends Extension {
async latest(page) { /* 只重写这个就行 */ }
}
方法清单
| 方法 | 时机 | 参数 | 返回值 | 说明 |
|---|---|---|---|---|
load() | 扩展加载时(一次) | 无 | void | 初始化、登录、设置 |
unload() | 扩展卸载时(一次) | 无 | void | 清理资源 |
latest(page) | 用户浏览"最近更新" | page: number(分页页码) | ListItem[] | 返回最新内容列表 |
search(kw, page) | 用户搜索 | kw: string(关键词)、page: number | ListItem[] | 返回搜索结果 |
detail(url) | 用户点进详情页 | url: string(扩展之前返回的唯一标识) | Detail | 返回详细信息 + 分集/章节 |
watch(url) | 用户点播放/阅读 | url: string | 类型相关 | 返回实际消费的内容 |
checkUpdate(url) | 检查追更 | url: string | string(最新集/章节标识) | 返回最新版本标识供 Mirv 比对 |
最核心的 4 个:latest / search / detail / watch
这四个方法构成了 Mirv 扩展的最小可用实现。只要这四个写对了,扩展就能跑起来。
调用链路(以视频为例):
用户打开 Mirv → latest(1) 被调用 → 返回视频卡片列表
→ 用户点击搜索框输入"进击的巨人"
→ search("进击的巨人", 1) 被调用 → 返回匹配的卡片
→ 用户点击卡片 → detail(url) 被调用 → 返回分集列表 + 简介
→ 用户点击第 3 集 → watch(第3集的url) 被调用 → 返回播放地址
→ Mirv 接管播放
漫画和小说同理,只是返回的 Detail 和 watch 数据类型不同。
checkUpdate 可选但有用
如果你实现了 checkUpdate(url),Mirv 可以主动检查某个条目是否有新集 / 新章节——这是追更功能的基础。
返回值是一个字符串(比如最新章节标题或章节号),Mirv 拿它和上次记录的比对。返回值不一样就说明有更新。
load 和 unload
load() 在扩展加载时调用一次,适合做:
- 从设置里读取用户配置;
- 登录某个需要鉴权的 API;
- 初始化缓存或状态。
unload() 在扩展被禁用或卸载时调用一次,适合清理资源。
如果你的扩展不需要任何初始化逻辑,这两个方法可以不写。