资讯详情

Bilibili-Evolved 搜索栏「数字联想」插件解析:纯数字输入的一键跳转机制

📅 2026/9/20 2:17:14 | 华诺云谱 👁 阅读
Bilibili-Evolved 搜索栏「数字联想」插件解析:纯数字输入的一键跳转机制
Bilibili-Evolved 搜索栏「数字联想」插件解析纯数字输入的一键跳转机制【免费下载链接】Bilibili-Evolved强大的哔哩哔哩增强脚本项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved导读Bilibili-Evolved 内置的全局搜索栏LaunchBar除了常规的关键词搜索外还提供了一系列「联想跳转」插件。其中number-search数字联想插件负责在用户输入纯数字时自动识别并给出对应的视频、直播间、专栏与用户空间跳转选项。本文以该插件为切入点结合其功能文档与源码实现深入讲解纯数字输入的匹配规则、背后调用的 B 站接口以及 LaunchBar 动作提供者Action Provider的插件化机制帮助读者理解如何扩展这一快捷跳转能力。功能概述纯数字输入得到什么按功能文档的说明当用户在搜索栏中输入纯数字时插件会提供以下跳转选项跳转至相应的视频视为 av 号跳转至相应的专栏视为 cv 号需要说明的是文档记录的是该插件的核心能力概述而实际源码见number-search/index.ts在发布版本中进一步扩展为四个候选动作除文档所述的两项外还包含直播间跳转与用户空间跳转。也就是说同一个纯数字串会被同时按 av 号、直播间房间号、cv 号与 UID 四种身份尝试解析并一次性给出全部可行的跳转入口。源码级实现解析1. 输入匹配/^()(\d)$/插件的入口定义在number-search/index.ts它通过setup({ addData })向launchBar.actions数据槽注册一个名为numberSearchProvider的动作提供者LaunchBarActionProvider。提供者的核心是getActions方法它接收用户输入首先进行正则匹配const { match, id, indexer } matchInput(input, /^()(\d)$/) if (!match) { return [] }这里的matchInput工具函数定义于launch-bar/common.ts它按三个捕获组拆解输入第一组type前缀类型、第二组id纯数字本体、第三组用于拼接indexer过滤关键词。/^()(\d)$/意味着第一组类型为空、第二组捕获连续多位数字因此只有「纯数字」输入如170001才能命中任何包含字母或符号的输入都会返回空数组直接跳过本提供者。2. 并行请求四个接口解析实体名称命中后插件用Promise.all并行请求四个 B 站接口分别解析该数字对应的实体名称const [aidJson, cvJson, uidJson] await Promise.all([ await getJsonWithCredentials(https://api.bilibili.com/x/web-interface/view?aid${id}), await getJson(https://api.bilibili.com/x/article/viewinfo?id${id}), await getJson(https://api.bilibili.com/x/web-interface/card?mid${id}), ])数据来源请求接口对应实体提取字段视频x/web-interface/view?aid带凭证请求av 号对应视频data.title专栏x/article/viewinfo?idcv 号对应专栏data.title用户x/web-interface/card?midUID 对应用户data.card.name直播间无请求直接构造链接直播间房间号—其中视频接口使用getJsonWithCredentialscore/ajax.ts 中定义携带登录凭证请求这与评论区等需要用户身份的接口保持一致其余两个接口使用普通getJson。直播间跳转不依赖接口因为直播房间号与live.bilibili.com/{id}的 URL 结构直接对应无需额外解析名称选项名直接回退为数字本身。各字段通过lodash.get安全取值即使某接口返回失败或数据结构变化也只是对应字段为空不会中断整体流程。3. 构造四个跳转动作解析完成后插件基于createLinkAction定义于launch-bar/common.ts构造四个LaunchBarAction并按固定顺序返回createLinkAction({ name: videoName, description: 视频跳转, link: https://www.bilibili.com/av${id} }) createLinkAction({ name: id, description: 直播间跳转, link: https://live.bilibili.com/${id} }) createLinkAction({ name: articleName,description: 专栏跳转, link: https://www.bilibili.com/read/cv${id} }) createLinkAction({ name: userName, description: 用户跳转, link: https://space.bilibili.com/${id} })createLinkAction会把这些字段组装成一个标准动作对象name内部名称取实体标题若标题为空则回退为indexer即纯数字本身icon: mdi-open-in-new动作图标indexer提供给搜索栏过滤的关键词即输入的纯数字action用户回车或点击时执行window.open(link, _blank)在新标签页打开目标链接。LaunchBarAction的完整字段定义见launch-bar-action.ts除上述字段外还支持content自定义 Vue 渲染内容、suggestName回填建议词、order排序权重等扩展能力本插件未使用这些字段保持默认展示。插件化机制launchBar.actions数据槽numberSearchProvider并非写死在 LaunchBar 内部而是通过 Bilibili-Evolved 的插件数据槽data slot机制注入的。LaunchBarActionProviders launchBar.actions见launch-bar-action.ts定义了数据槽键名任何插件都可以在setup中通过addData(launchBar.actions, providers {...})往这个数组里追加自己的提供者。搜索栏在用户输入时会遍历所有已注册提供者并合并它们返回的动作列表LaunchBarActionProvider.getActions的接口定义见同一文件的 L31-L37。正是这套机制让「联想跳转」家族得以低成本扩展。除本文主角外registry/lib/plugins/launch-bar/目录下还包含若干同类插件它们共享matchInput与createLinkAction两个公共工具仅通过不同正则区分输入形态插件正则匹配前缀跳转目标number-search/^()(\d)$/无前缀纯数字视频 / 直播间 / 专栏 / 用户uid-search/^(uid)(\d)$/uid用户空间x/space/wbi/acc/infocv-search/^(cv\|rl)(\d)$/cv/rl专栏 / 文集audio-search/^(a[um])(\d)$/au/am音频 / 播放列表bangumi-search/^(md\|ss\|ep)(\d)$/md/ss/ep番剧详情 / 剧集例如 uid-search/index.ts 使用/^(uid)(\d)$/仅当输入以uid开头时才触发cv-search/index.ts 则额外区分rl前缀的文集跳转。这些插件与number-search形成互补纯数字命中「四合一」联想带前缀的输入则走更精确的单目标跳转。使用方式与搜索栏整体协作Bilibili-Evolved 的搜索栏本体是一个隐藏组件hidden: true见launch-bar/index.ts通过快捷键唤起。相关插件在launch-bar/plugin.ts 中注册了showLaunchBar动作默认绑定/键。在任意页面按下/唤起搜索栏后直接输入纯数字如170001回车即可看到「视频跳转 / 直播间跳转 / 专栏跳转 / 用户跳转」四个候选各选项会优先显示解析出的真实标题例如视频名、用户名选择对应项后动作会通过window.open在新标签页打开目标页面输入带前缀的数字如av170001、uid123则交由其他提供者处理实现精确跳转。值得注意的是数字联想的解析结果依赖 B 站接口的实时返回若当前网络无法访问对应接口或接口返回非成功状态该实体对应的选项标题会为空、仍保留数字形态的兜底名称跳转链接本身始终可用。此外searchProvider见search-provider.ts负责常规关键词搜索与 B 站搜索建议与数字联想插件互不干扰共同构成搜索栏的完整交互。小结number-search是 Bilibili-Evolved 搜索栏「数字联想」能力的实现样例通过一个正则完成输入分类通过三个 B 站公开接口并行解析实体最终借助createLinkAction统一产出可执行的跳转动作。其价值不仅在于「输数字跳视频」这一层体验更在于它演示了launchBar.actions数据槽的插件化扩展方式——任何开发者都可以仿照registry/lib/plugins/launch-bar/下的现有插件编写自己的LaunchBarActionProvider注入搜索栏实现任意自定义跳转规则。若想深入理解完整机制建议按以下顺序阅读仓库源码动作与提供者接口定义src/components/launch-bar/launch-bar-action.ts提供者注册机制与快捷键绑定src/components/launch-bar/plugin.ts公共匹配与动作构造工具registry/lib/plugins/launch-bar/common.ts同类插件实现uid-search、cv-search、audio-search、bangumi-search【免费下载链接】Bilibili-Evolved强大的哔哩哔哩增强脚本项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。