news 2026/10/28 1:43:17

Bilibili-Evolved 动态反折叠 unfoldFeeds:折叠动态自动展开的原理与开启教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Bilibili-Evolved 动态反折叠 unfoldFeeds:折叠动态自动展开的原理与开启教程

Bilibili-Evolved 动态反折叠 unfoldFeeds:折叠动态自动展开的原理与开启教程

【免费下载链接】Bilibili-Evolved强大的哔哩哔哩增强脚本项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved

翻动态时经常遇到这种情况:一条 UP 主的新作品被折叠成一行小字,你得把鼠标移上去、点一下「展开」才能看全。Bilibili-Evolved 内置的「动态反折叠」组件(标识unfoldFeeds)就是替你省掉这一步的——折叠动态一出现在页面上,它就自动帮你点开。

先讲清楚它替你做了什么:见到折叠就自动展开

这个组件的全部行为可以浓缩成一句话:检测到卡片上有折叠区域,就自动点一次,把内容展开。至于动态为什么会被折叠,官方文档(registry/lib/components/feeds/unfold/index.md)列了三种常见原因:

折叠场景平台为什么这么做
短时间内大量更新作品单个 UP 主密集发动态时,折叠一部分,避免刷屏时间线
多人转发同一个作品重复内容被聚合折叠,减少信息冗余
被审核折叠内容未过审核,默认收起显示

三类原因它一视同仁。组件不关心折叠为什么发生,只关心「这张卡片上有没有可以点的折叠区」,有就点。

哪些页面会自动展开,哪些不会

组件通过urlInclude: feedsUrlsWithoutDetail声明生效范围,这份 URL 清单定义在 src/core/utils/urls.ts:

是否生效页面
✅ 生效动态首页t.bilibili.com(关注动态流)
✅ 生效个人空间space.bilibili.com/*(UP 主动态列表)
✅ 生效直播间live.bilibili.com/*(直播间动态区)
❌ 不生效动态详情页(t.bilibili.com详情子路径、www.bilibili.com/opus/{id}等)

排除详情页是个刻意的取舍:详情页是单条内容的独立阅读场景,不存在「滚动加载新卡片」,自动展开几乎没有收益,反而可能打断阅读。所以它只盯着动态列表型页面干活。

三步看懂它的实现:感知、定位、点击

整个 组件定义 核心逻辑不到十行,拆成三步:

  1. 感知新卡片。组件调用forEachFeedsCard(src/components/feeds/api/manager/index.ts)。这个 API 先确认当前页面属于动态页面,然后启动卡片监测,对页面上已经存在的卡片立即回调一次,之后滚动加载、切换 tab 产生的新卡片也会持续触发回调——动态反折叠正是挂在它的added回调上。
  2. 定位折叠按钮。用 spin-query 的select做轮询查询:在卡片 DOM 内部反复查找.fold-hoverable(旧版折叠区类名)或.bili-dyn-item-fold(新版类名),查到非空结果才返回。之所以要轮询而不是查一次,是因为卡片刚插入页面时,内部按钮往往还没渲染出来。
  3. 模拟点击。拿到按钮后执行foldButton?.click()触发一次程序化点击。可选链是兜底写法:卡片没有折叠区时foldButton为null,直接静默跳过,不报错。
added: async card => { const foldButton = await select( () => dq(card.element, '.fold-hoverable, .bili-dyn-item-fold'), ) foldButton?.click() }

V1 还是 V2,卡片管理器怎么选

第 1 步的「感知」背后有两代卡片管理器实现,isV2Feeds()按当前页面自动挑选:专栏动态页(www.bilibili.com/opus/{id})直接走 V2;其余情况下,Cookie 里hit-dyn-v2大于 0(说明你命中过新版动态)且页面是t.bilibili.com或space.bilibili.com,走 V2,否则回退 V1。两代实现都继承自同一个抽象基类(manager/base.ts),差异主要在「怎么认出这是一张卡片」:

对比项V1(v1.ts)V2(v2.ts)
卡片识别选择器类名.card[data-did],ID 直接读 DOM 属性.bili-dyn-list__item, .bili-dyn-item, .bili-opus-view
结构化信息解析旧版 Vue 实例数据(作者、转发文案等)通过getVue2Data从 Vue 2 实例取id_str、类型、作者、点赞/转发/评论数,并回填data-did属性
首屏/骨架屏处理发现.skeleton骨架屏就先挂个观察器,等骨架消失再重新解析解析后await selectAll等待首次 Vue 渲染完成,再派发事件
增删监测对列表容器挂childListMutationObserver,新增/移除节点分别走addCard/removeCard同样是childList观察,额外在每轮变更中清理已脱离 DOM 的卡片

无论哪一代,新卡片入列后都会派发AddCard事件、执行注册好的added回调——这就是动态反折叠的切入点,组件本身不需要知道自己面对的是旧版还是新版动态。

怎么开启,以及要清楚它的边界

开启步骤:

  1. 安装 Bilibili-Evolved 脚本,打开 B 站任意页面;
  2. 点开页面上的脚本设置面板,进入组件列表;
  3. 切到「动态」分类(组件标签feeds),找到「动态反折叠」并打开开关;
  4. 刷新或继续浏览动态流,折叠卡片出现即自动展开。

用之前有几个边界要心里有数:

  • 零配置项:源码里它没暴露任何选项,行为固定为「见到折叠就展开」,没有可调节项,也属正常设计;
  • 对审核折叠可能无效:它只做点击动作。如果平台服务端就没返回可展开的内容,点了也不会有可见变化,这是平台侧限制;
  • 只在列表型页面生效:动态详情页不在覆盖范围(见上表);
  • 新旧动态都兼容:折叠按钮同时匹配新旧两套类名,卡片管理器又按 Cookie 自动选 V1/V2,所以页面迭代时无需手动切换。

对普通用户,它砍掉了反复悬停、点「展开」的重复操作;对想深挖的开发者,这不到十行的入口是个绝佳的最小样本——沿着 组件定义 一路追到卡片管理器和 spin-query,正好完整走一遍 Bilibili-Evolved「元数据 → 卡片监测 → DOM 操作」的整条链路。

【免费下载链接】Bilibili-Evolved强大的哔哩哔哩增强脚本项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 1:42:38

Python计算机视觉实战:手势识别、虚拟键盘与姿态检测

简介:这份合辑面向已具备Python基础、希望上手计算机视觉与人工智能应用的学习者,围绕手势识别、虚拟键盘、姿态检测等典型场景组织调试通过的示例,可用于课程实验、毕业设计选题参考与个人项目练手。压缩包共35个文件,约16.91MB&…

作者头像 李华
网站建设 2026/10/28 1:42:17

卫星遥感遥感算力集群:从单机瓶颈到规模化生产的落地路径

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

作者头像 李华
网站建设 2026/10/28 1:42:17

改性HDPE再生颗粒重塑户外家具发泡板材价值:以技术赋能破解工艺痛点、升级客户原料使用习惯

1. 核心观点改性HDPE再生颗粒通过分子结构调控与熔体强度优化,可从材料端解决户外家具挤出HDPE发泡板材的发泡倍率低、泡孔不均匀、表面凹凸不平、产品不够轻便与成本居高不下的核心痛点。 轻质家具板材市场2024年规模34.5亿美元、预计2032年达61.8亿美元&#xff0…

作者头像 李华
网站建设 2026/10/28 1:41:58

计算机论文算法段落被标AI,快降重和蝌蚪论文实测谁改得动

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

作者头像 李华
网站建设 2026/10/28 1:40:56

谷歌新闻数据采集教程:Python实时抓取新闻做舆情监控(附代码)

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

作者头像 李华