- 前端
- 音视频
【免费下载链接】Bilibili-Evolved
强大的哔哩哔哩增强脚本
导读
本文聚焦 Bilibili-Evolved 增强脚本中"搜索栏 - UID 跳转"(launchBar.actions.uidSearch)插件的完整技术实现。该插件是脚本全局搜索栏(LaunchBar)动作体系的一员,其核心价值在于:当你在搜索栏输入uid前缀加数字时,脚本会自动识别出用户 ID,调用哔哩哔哩官方 API 解析该用户的昵称,并直接生成"一键跳转到该用户空间主页"的快捷动作。读完本文,你将掌握该插件的触发语法、底层匹配规则、API 调用链路,以及 Bilibili-Evolved 搜索栏动作提供者(Action Provider)的可扩展插件机制。
功能定位:搜索栏里的用户直达通道
原功能文档仅用一句话概括其定位:"在输入 UID (用户 ID) 时, 提供对应的跳转选项。"(见 uid-search 功能描述)
展开来看,这包含三层能力:
- 识别:把用户输入的文本与
uid前缀格式进行匹配,区分出"这是 UID"还是普通搜索词; - 解析:通过 B 站官方接口把纯数字 UID 反查为可读的用户昵称,让跳转选项更友好;
- 跳转:生成一个带图标、带描述的可点击动作,执行后在浏览器新标签页打开对应用户的空间主页。
它属于 Bilibili-Evolved 内置插件中 launch-bar(搜索栏)动作系列,与 数字联想 number-search(纯数字同时提供视频/专栏/直播间/用户跳转)、音频号跳转 audio-search(au/am 号跳转)等插件共同组成一套"输入即跳转"的快捷生态。
使用方式:如何触发 UID 跳转
安装并启用 Bilibili-Evolved 脚本后,在页面顶部的搜索栏(LaunchBar)中输入uid加上纯数字的用户 ID,例如:
uid2 uid1024 uid208259输入后,搜索栏下方会立即出现一个候选动作,其展示逻辑为:
- 标题:反查到的用户昵称(若 API 未返回昵称,则回退显示
uid + 数字本身); - 描述:固定为"用户跳转";
- 图标:
mdi-open-in-new(外部打开图标),提示这是一个跳转类动作。
此时按回车或点击该条目,脚本会在新标签页打开https://space.bilibili.com/{uid},直达目标用户的空间主页。如果不满足uid + 数字格式(例如只输入数字、输入其他前缀),该插件不会返回任何动作,输入内容会走 LaunchBar 默认的搜索流程。
实现原理:匹配 → 查询 → 生成动作
该插件的完整实现位于 uid-search/index.ts,整个流程可分为三步,全部封装在一个异步的getActions(input)方法中。
第一步:正则匹配输入
const { match, id, indexer } = matchInput(input, /^(uid)(\d+)$/) if (!match) { return [] }这里调用了 launch-bar 系列插件共享的工具函数matchInput(见 common.ts)。其实现为:
export const matchInput = (input: string, pattern: RegExp) => { const match = input.match(pattern) if (!match) { return {} } const type = match[1] const id = match[2] const indexer = `${type}${id}` return { match, type, id, indexer } }关键细节:
- 正则
/^(uid)(\d+)$/要求完全匹配:uid必须位于开头、后跟一位以上数字、且输入中不能有其他字符,因此uid2abc、uid 2都不会命中; - 正则的捕获组被拆分为
type(即uid前缀)与id(纯数字 UID),二者拼接成的indexer(如uid2)将作为该动作在搜索栏中的过滤关键词; - 若未匹配,函数返回
{},插件随即返回空数组[],表示本插件对此输入"不感兴趣",不会干扰其他提供者的搜索结果。
第二步:调用官方 API 反查昵称
匹配成功后,插件通过 Bilibili-Evolved 的getJson工具(位于 src/core/ajax.ts)请求哔哩哔哩用户信息接口:
const json = await getJson(`https://api.bilibili.com/x/space/wbi/acc/info?mid=${id}`) const { name } = lodash.get(json, 'data', {})- 接口路径中的
mid参数即为上一步解析出的 UID; - 使用 lodash 的
get安全取值,从响应data字段中提取name(用户昵称),即使接口异常也只会得到undefined,不会导致插件崩溃; - 注意此接口为公开信息接口,未携带登录凭证,因此反查到的昵称与当前登录状态无关。
第三步:生成跳转动作
return [ createLinkAction({ name, description: '用户跳转', link: `https://space.bilibili.com/${id}`, indexer, }), ]createLinkAction同样是共享工具(common.ts),它把参数标准化为一个符合LaunchBarAction接口的动作对象:
export const createLinkAction = (input: { name; displayName?; description?; indexer; link }): LaunchBarAction => { const { name, displayName, description, indexer, link } = input return { name: name || indexer, displayName, icon: 'mdi-open-in-new', indexer, description, action: () => { window.open(link, '_blank') }, order: 0, } }可以注意到:
- 若反查不到昵称,
name会回退为indexer(即uid + 数字),保证动作永远有可显示的名称; - 动作的实际执行体
action是window.open(link, '_blank'),即在新标签页打开空间主页链接; order: 0表示该动作在候选列表中的默认排序权重(数字越小越靠前,由 LaunchBar 的排序逻辑消费)。
搜索栏插件机制:动作提供者如何被调度
UID 跳转插件本身并不直接实现界面,而是通过 Bilibili-Evolved 的插件数据总线注册为"动作提供者",由全局搜索栏统一调度。理解这层机制才能看懂插件入口代码:
export const plugin: PluginMetadata = { name: 'launchBar.actions.uidSearch', displayName: '搜索栏 - UID 跳转', async setup({ addData }) { addData('launchBar.actions', (providers: LaunchBarActionProvider[]) => { providers.push({ name: 'uidSearchProvider', getActions: async input => { /* 上述三步逻辑 */ }, }) }) }, }提供者接口(LaunchBarActionProvider)
搜索栏动作提供者的类型定义见 launch-bar-action.ts:
export interface LaunchBarActionProvider { name: string getActions: (input: string) => Promise<LaunchBarAction[]> }每个提供者只需实现两个字段:自身名称,以及"根据用户输入返回候选动作"的异步方法。UID 跳转插件注册的提供者名为uidSearchProvider,插件全名launchBar.actions.uidSearch则用于在脚本设置面板中与其他插件区分。
搜索栏的调度与过滤流程
全局搜索栏组件 LaunchBar.vue 在挂载时通过registerAndGetData('launchBar.actions', [searchProvider, historyProvider])获取全部动作提供者(内置的搜索建议与历史记录提供者作为默认值),每当用户输入变化(经过 200ms 防抖),就会遍历所有提供者并收集各自的getActions(input)结果(见getOnlineActionsInternal中的Promise.all并发调用),然后使用 Fuse.js 模糊搜索引擎对候选动作的indexer、displayName、name、description等字段进行打分过滤,最终按order升序展示前 13 条。
因此,uid2这类输入会同时触发多个提供者:UID 跳转插件靠indexer字段(uid2)获得极高的匹配分数从而排在前列,而普通搜索建议则按常规路径兜底,两者互不冲突。
插件的装载方式
从插件体系看,uid-search是 Bilibili-Evolved 内置插件之一。脚本在运行时通过loadAllPlugins(src/plugins/plugin.ts)汇总三类插件——组件附带的插件、内置插件、用户安装的插件——并逐一执行其setup。内置插件通过require.context从插件目录自动收集(plugin.ts),因此每个 launch-bar 子目录下index.ts导出的plugin对象都会被自动注册,无需手工登记。
与同类跳转插件的对比
为了更准确地理解 UID 跳转的设计取舍,可以对比 launch-bar 动作系列中的其他插件:
| 插件 | 匹配格式 | 跳转目标 | 特点 |
|---|---|---|---|
| UID 跳转(本文) | uid+ 数字 | 用户空间 | 单目标、需前缀、反查昵称 |
| 数字联想 | 纯数字 | 视频 / 直播间 / 专栏 / 用户 | 单次输入并发查询 3 个 API,返回最多 4 个候选 |
| 音频号跳转 | au/am+ 数字 | 音频 / 播放列表 | 前缀区分两种资源类型 |
从 number-search/index.ts 可以看到,数字联想插件的实现方式是在一次Promise.all中同时请求视频信息(x/web-interface/view)、专栏信息(x/article/viewinfo)与用户卡片(x/web-interface/card)三个接口,再生成多个带不同description的动作。相比之下,UID 跳转插件刻意要求uid前缀,正是为了消除"纯数字到底是 av 号还是 UID"的歧义——这也是两个插件能够共存且互不干扰的设计基础:带前缀的输入交给uidSearchProvider,不带前缀的纯数字交给numberSearchProvider,各自正则互斥。
扩展思路:如何仿写同类提供者
理解了uidSearchProvider的模式后,开发者可以很轻松地仿写出新的跳转类提供者,只需三步:
- 定义匹配正则,例如
(/^(bv)([\w]+)$/i),用matchInput解析出类型与 ID; - 视需要调用
getJson请求 B 站接口反查展示名(可选,失败时name会回退为indexer); - 用
createLinkAction生成带icon、description、link与indexer的动作,并通过addData('launchBar.actions', ...)推入提供者数组。
由于提供者机制是数据驱动的(registerAndGetData支持任意插件注入),即使是用户自己安装的第三方插件(通过installPlugin加载的代码,见 plugin.ts),只要遵循PluginMetadata结构并在setup中调用addData,同样能向搜索栏贡献新的跳转动作,这就是该功能模块开放性的直接体现。
小结
- 功能:在 Bilibili-Evolved 搜索栏输入
uid + 数字,即可获得指向对应用户空间的新标签页跳转动作; - 实现:正则精确匹配 →
getJson请求x/space/wbi/acc/info反查昵称 →createLinkAction生成动作,全程约 30 行代码; - 机制:通过
addData('launchBar.actions', ...)注册LaunchBarActionProvider,由 LaunchBar 统一并发拉取、Fuse 模糊过滤并按order排序展示; - 参考:核心源码位于 uid-search/index.ts、common.ts,调度逻辑见 LaunchBar.vue 与 launch-bar-action.ts。
这套"前缀正则 + 接口反查 + 动作生成"的插件模式,是 Bilibili-Evolved 搜索栏所有快捷跳转能力的通用骨架,也是理解脚本插件数据总线(addData/registerAndGetData)用法的最佳入门样例之一。
- 前端
- 音视频
【免费下载链接】Bilibili-Evolved
强大的哔哩哔哩增强脚本
相关推荐
Bilibili-Evolved 搜索栏「数字联想」插件解析:纯数字输入的一键跳转机制
Bilibili Evolved 搜索栏「数字联想」插件解析:纯数字输入的一键跳转机制 导读 Bilibili Evolved 内置的全局搜索栏(LaunchB
前端音视频Bilibili-Evolved 搜索栏番剧跳转插件:ss/ep/md 号一键直达番剧详情
Bilibili Evolved 搜索栏番剧跳转插件:ss/ep/md 号一键直达番剧详情 导读 本文围绕 Bilibili Evolved(哔哩哔哩增强脚本)
前端音视频Bilibili-Evolved 搜索栏「搜索推荐」插件深度解析:launch-bar/trending-search 的实现原理与使用指南
Bilibili Evolved 搜索栏「搜索推荐」插件深度解析:launch bar/trending search 的实现原理与使用指南 导读 「搜索栏 搜
前端音视频
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考