Bilibili-Evolved 网址AV号转换(avUrl)组件:BV 链接自动改写为 AV 号的实现与注意事项
Bilibili-Evolved 网址AV号转换avUrl组件BV 链接自动改写为 AV 号的实现与注意事项【免费下载链接】Bilibili-Evolved强大的哔哩哔哩增强脚本项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-EvolvedBilibili-Evolved哔哩哔哩增强脚本内置了一个名为「网址AV号转换」组件标识avUrl的实用组件用于在用户通过 BV 号链接访问视频时自动将地址栏中的 BV 号改写为对应的 AV 号。本文以该组件为核心结合其组件文档与核心实现讲解它的功能定位、实现原理以及文档明确警告的浏览器历史记录副作用帮助读者理解这一改写的底层机制并正确评估是否启用。功能概述把 BV 链接自动改写为 AV 链接B 站视频的链接同时存在两种编号形式BV 号形如BV1xx411c7mD是当前主流的分享链接形式AV 号形如av170001是更早的编号体系。「网址AV号转换」组件的核心行为是当视频页面的链接是 BV 号时自动将其转换为对应的 AV 号。它覆盖的不只是普通视频页也包含番剧bangumi播放页源码中的改写正则/\/(video|bangumi)\/(BV[\w])/i同时匹配/video/BV...与/bangumi/BV...两种路径即可佐证见 av-url/index.ts。该组件在官方功能清单中同样有登记位于 doc/features/features.md功能标签为「视频」「工具」tags: [componentsTags.video, componentsTags.utils]。使用前提与生效范围组件通过urlInclude: videoUrls限定只在包含视频的页面生效见 av-url/index.ts。videoUrls定义于 src/core/utils/urls.ts包括//www.bilibili.com/video/普通视频页拜年纪等节日活动页面festivalUrls见 urls.ts稍后再看、收藏夹连播、UP 主连播、合集等媒体列表页面mediaListUrls见 urls.ts也就是说在这些页面范围内打开 BV 号链接时脚本会尝试改写页面结构不符合匹配条件如无 AV 号可用时则保持原样。实现原理基于加载时机、URL 监听与历史记录替换的三步流程组件入口在页面完全加载后启动整个改写流程可分为三个阶段源码见 av-url/index.ts第一步等待页面完全加载入口使用fullyLoaded包装回调。fullyLoaded定义于 src/core/life-cycle.ts若document.readyState已经是complete则立即执行否则等待window的load事件。这保证了改写动作发生在页面资源基本就绪之后。第二步监听 URL 变化并获取 AV 号组件通过urlChange注册回调。urlChange定义于 src/core/observer.ts其内部通过lodash.once保证只初始化一次监听器借助allMutations观察 DOM 变更一旦发现document.URL发生变化就派发自定义的urlChange事件urlChange在注册时还会立即用当前 URL 调用一次回调因此首次进入页面时也会触发改写逻辑。回调内部通过select轮询获取全局对象上的unsafeWindow.aid。select定义于 src/core/spin-query.ts它会反复执行传入的函数直到返回非null且非undefined的值为止适合等待 B 站页面异步填充的播放数据。如果最终拿不到aid组件直接return不做任何改写。第三步改写 URL 并替换历史记录拿到aid后组件先做一次特殊排除如果当前 URL 包含videocard_series系列视频相关页面则跳过改写并打印skip video series日志——源码注释明确指出系列视频不能转换否则会触发无限刷新见 av-url/index.ts。随后用正则匹配 URL 中的 BV 段const newUrl document.URL.replace( /\/(video|bangumi)\/(BV[\w])/i, (_, type) /${type}/av${aid}, )即把/video/BV1xx...改写为/video/av170001番剧路径同理。改写使用window.history.replaceState(history.state, , newUrl)完成见 av-url/index.ts。replaceState的语义是替换当前历史记录条目而不是新增条目这是理解该组件副作用的关键它不会在历史堆栈中多压入一条记录当前地址栏 URL 被原地替换为 AV 号形式而页面本身不会重新加载因此改写是无刷新的、对用户几乎无感的。必须了解的副作用历史记录重复标题与后退次数增加这是组件文档中明确警告的内容属于使用前应当知情的重要注意事项请注意这会导致浏览器历史记录出现重复的标题分别是转换前后的网址并可能导致后退要多退几次。其成因与上述replaceState机制相关可以从实现层面这样理解你通过某个 BV 链接进入页面时浏览器历史中已经写入了一条以 BV 链接为地址的记录脚本随后用replaceState将当前条目替换为 AV 地址但这条记录原有的标题来自 BV 链接页面并不会随之变更。于是你的历史列表里会出现两条「内容相同、标题相近但地址不同」的记录分别对应转换前后的网址。当你连续多次在不同 BV 链接间跳转并想通过后退返回时由于每条记录都被拆分成了转换前、转换后两个条目后退需要的次数会比直观预期更多。如果你的使用习惯高度依赖浏览器后退键且对历史记录整洁度敏感可以考虑关闭该组件反之若你更在意地址栏中显示统一的 AV 号形式则该副作用通常可以接受。如何在 Bilibili-Evolved 中启用与关闭「网址AV号转换」属于脚本的常规功能组件启用/关闭操作与其他组件一致打开 Bilibili-Evolved 的设置面板在功能列表中找到「网址AV号转换」搜索avUrl即可定位切换开关即可控制是否启用。它不提供额外的配置选项行为即「开启则自动改写关闭则保持 BV 链接原样」。由于脚本默认会加载功能清单中启用的组件关闭后地址栏将不再发生改写。与其他编号相关组件的区分Bilibili-Evolved 中还有另一个易混淆的组件「BV 号转换」bvidConvert它的作用是在功能面板中显示视频的 AV 号和 BV 号并提供带标题复制链接等选项见 bvid-convert/index.md 与 bvid-convert/index.ts。两者定位不同avUrl是地址栏层面的静默改写bvidConvert是面板层的编号展示与复制工具可按需分别启用。小结「网址AV号转换」是一个小而精的实用组件借助fullyLoadedurlChangeselect的组合分别来自 life-cycle.ts、observer.ts、spin-query.ts它能在页面加载后无刷新地把 BV 链接改写为 AV 链接同时通过replaceState保持历史记录条目数量不变。但正如其官方文档所提示的这一改写会带来历史记录标题重复、后退次数增多的副作用是否启用取决于个人对地址栏显示形式与浏览器历史整洁度的权衡。理解其实现机制后你可以更有把握地决定这个开关的去留。【免费下载链接】Bilibili-Evolved强大的哔哩哔哩增强脚本项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

QMK 固件仓库 Sidekick 5×7 宏键盘板全解析:硬件配置、矩阵定义、默认键位与编译烧录实战

QMK 固件仓库 Sidekick 5×7 宏键盘板全解析:硬件配置、矩阵定义、默认键位与编译烧录实战

QMK 固件仓库 Sidekick 57 宏键盘板全解析:硬件配置、矩阵定义、默认键位与编译烧录实战 【免费下载链接】qmk_firmware Open-source keyboard firmware for Atmel AVR and Arm USB families 项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware …

2026/9/20 20:30:10 阅读更多 →
CMSIS-4静态工程:嵌入式底层契约与迁移约束深度解析

CMSIS-4静态工程:嵌入式底层契约与迁移约束深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 15:42:03 阅读更多 →
VMware Horizon SSL证书验证失败排查与临时解决方案

VMware Horizon SSL证书验证失败排查与临时解决方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 15:42:03 阅读更多 →

最新新闻

Preact Table 的 AppGroupColumnDef:预绑定组件的增强分组列定义

Preact Table 的 AppGroupColumnDef:预绑定组件的增强分组列定义

前端UI组件 【免费下载链接】table 🤖 Headless UI for building powerful tables & datagrids for TS/JS - React-Table, Vue-Table, Solid-Table, Svelte-Table 项目地址: https://gitcode.com/gh_mirrors/ta/table 点击查看 免费下载 导读 AppG…

2026/9/20 20:39:04 阅读更多 →
用 ChatTTS-ui 在本地跑通离线语音合成:从部署到出声的完整路径

用 ChatTTS-ui 在本地跑通离线语音合成:从部署到出声的完整路径

用 ChatTTS-ui 在本地跑通离线语音合成:从部署到出声的完整路径 【免费下载链接】ChatTTS-ui 一个简单的本地网页界面,使用ChatTTS将文字合成为语音,同时支持对外提供API接口。A simple native web interface that uses ChatTTS to synthesiz…

2026/9/20 20:39:04 阅读更多 →
快速备份QQ空间历史说说:GetQzonehistory 新手完整指南

快速备份QQ空间历史说说:GetQzonehistory 新手完整指南

快速备份QQ空间历史说说:GetQzonehistory 新手完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory GetQzonehistory 是一个把你自己QQ空间里的历史说说抓取下来&#xf…

2026/9/20 20:39:04 阅读更多 →
ChatTTS-ui AMD显卡加速:ROCm全链路配置与实测数据

ChatTTS-ui AMD显卡加速:ROCm全链路配置与实测数据

ChatTTS-ui AMD显卡加速:ROCm全链路配置与实测数据 【免费下载链接】ChatTTS-ui 一个简单的本地网页界面,使用ChatTTS将文字合成为语音,同时支持对外提供API接口。A simple native web interface that uses ChatTTS to synthesize text into …

2026/9/20 20:39:04 阅读更多 →
三步装好、三种场景调好:华硕笔记本 GHelper 完整指南

三步装好、三种场景调好:华硕笔记本 GHelper 完整指南

三步装好、三种场景调好:华硕笔记本 GHelper 完整指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Ex…

2026/9/20 20:39:04 阅读更多 →
OpenCode + DeepSeek API 自配路线,Base URL 填 TaoToken

OpenCode + DeepSeek API 自配路线,Base URL 填 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 20:38:03 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →