B 站体验增强核心,一装到位:CDN 优选(救海外卡顿)· 免登录看评论/动态/1080p · 主题跟随系统深浅 · 评论显 IP 属地 · 播放不息屏——统一设置面板集中开关。Safari 友好、无需扩展、零外部依赖。
queste sono le versioni di questo script in cui il codice è stato aggiornato Visualizza tutte le versioni.
fix(core): 抽屉 iframe 深色下向上回弹露白——html/body 跟随 --bg1;Core 0.5.10→0.5.11
抽屉里向上橡皮筋回弹(overscroll)会露出根元素背景,而 B 站深色只给部分容器上色、 html/body 根仍是白 → 露白(theme-sync 那句垫底只作用于 html,且用户可能用 B 站原生深色、 没开 theme-sync)。在抽屉 iframe 无条件注入的样式里,让 html/body 背景跟随 B 站自己的 主题 token var(--bg1)(深即深、浅即浅),不依赖 theme-sync 开关;未定义时声明失效不强上色。
Co-Authored-By: Claude Opus 4.8 [email protected]
ci: 加 ESLint + tsc 类型检查 + GitHub Actions CI(typecheck/lint/test/build/dist 同步校验)
补上「集成靠审查、纯逻辑靠单测」之外的机械关卡:
tsc --noEmit
| void
| undefined
无行为改动,不升版本(类型修正 / 死代码 / 形参重命名)。
test: 引入 Vitest 测纯逻辑层,并把硬逻辑从 init() 闭包抽成纯函数;Core 0.5.9→0.5.10
针对「脚本变大如何保正确性」:给纯逻辑层补单测(32 例)。这类逻辑是最易犯错、也最该测的 (历史那个 click/web/h5 前缀误杀、回程切片、wbi 签名都属此类);集成/环境正确性仍靠审查 + 真机。
抽取(行为保持,原调用点不变,靠 build 编译验证):
工具链:Vitest(devDep),npm run test;co-located src/*/.test.ts,node 环境不碰 DOM。 .npmrc 关 verify-deps-before-run(pnpm 11 因 esbuild 构建脚本被忽略会在 run 前中断)。
npm run test
feat: 「关于」页显示 Feed 版本;Feed 版本同样单一源并上报(Core 0.5.8→0.5.9 / Feed 0.3.2→0.3.3)
feat(core): 设置面板加「关于」页(版本号 + GitHub / 反馈 / GreasyFork 链接);Core 0.5.7→0.5.8
feat(core): 设置齿轮并入 Feed 右下按钮组、去掉左下吸边;README 加开发期说明并去过时(#2 追加);Core 0.5.6→0.5.7
1) 打开设置的入口统一到右下:
2) README:
feat(core): 打开方式接管收窄到浏览页——播放页内点视频走原生 SPA、喂给回程;Core 0.5.5→0.5.6
全站抽屉/打开方式此前在「所有页」接管视频点击,含播放页本身,导致:① 新标签模式下 播放页点相关视频也新开标签、永不 SPA → 回程恒 0 层;② 抽屉模式在播放页叠抽屉。
改为把接管收窄到「浏览/列表」语境(首页/搜索/空间/收藏/历史/动态…), 视频播放页内一律放行走原生 SPA:既喂给回程建来时路,又不叠抽屉。三种模式各自自洽 (抽屉/新标签模式下每个播放页/标签都是独立的一份来时路)。
refactor(core): 移除「埋点拦截」模块——误伤面大、非核心,得不偿失(#2 追加);Core 0.5.3→0.5.5
埋点拦截要靠猜 B 站的私有埋点路径做前缀匹配,天然最易误伤相邻接口: 先有「免登录 + 埋点拦截」同开反复重刷(收窄过一次),又有前缀 click-interface/click 连坐 click/web/h5 播放上报、真登录下所有视频不进观看历史。而它只是省流/降开销的边角功能 (头牌是 CDN 优选 / 免登录 / 主题跟随),换来的持续误伤风险不划算,整模块移除。
本提交替换上一条「摘 click-interface」的修法(79a0f4c,已撤回):模块既除,历史自然恢复。
fix(core): 埋点拦截误杀播放上报致观看历史全丢——从黑名单摘掉 click-interface(#2 追加);Core 0.5.3→0.5.4
真登录账号下所有视频都不进观看历史(不分打开方式,原生直开也不记)。根因:埋点拦截 黑名单里的 'api.bilibili.com/x/click-interface/click' 用前缀命中把 click/web/h5 一起拦了, 而 click/web/h5 是每次播放一次的「播放上报」,B 站据它写入观看历史——被拦=历史不写入。 实测关掉埋点拦截历史即恢复,确证。
修:从 TELEMETRY 摘掉 click-interface 整条。该接口低频(每播一次),非省流大头 (大头是 data.bilibili.com/log 与 sendBeacon),放行零感知代价,换回观看历史。
fix(core): 免登录修 iPad/移动 Safari 只能 480p(掰回桌面 DASH 路径)(#2 追加);Core 0.5.2→0.5.3
iPad/移动 Safari 触发 B 站触屏判定 → 播放器发 platform=html5(MP4),服务端对 html5 的免登录 try_look 只给 480p,qn=80 也被打回,手动切也被服务端拉回——桌面无此问题, beefreely 同病(两者都只改 qn/try_look、不碰 platform)。非 Safari 编解码限制。
修:playurl 重签时强改 platform=pc + fnval=4048(全 DASH) + fourk=1,掰回桌面策略 放行 1080p 试看。桌面本就这套零风险,iPad 靠 MSE 放 DASH。实机 iPad 验证 1080p 通。
fix(core): 免登录修 UP 空间页死循环 + 对照 beefreely 全面补洞(#2 追加);Core 0.5.1→0.5.2
对照 references/beefreely 全源码逐端点审计,修 5 处:
审计结论存档:wbi 签名我们比 beefreely 更对(其 sub key 误读 img url);个人页排除 更安全非 gap;双方均无 -352/w_webid 风控处理;假历史/直播 WS/下载器接口有意不做。
feat(core): 回程胶囊迁入 Core(顶层+抽屉内)+ 齿轮仅首页吸边;Core 0.5.0→0.5.1
feat(core): 全站抽屉——「打开方式」移入 Core、全站视频点击生效;Core 0.4.7→0.5.0 / Feed 0.3.1→0.3.2
「打开方式」从 Feed 解耦、上移到 Core:全站(首页 / 搜索 / 收藏 / 历史 / 别人空间…)点视频 都按它在 底部抽屉 / 网页全屏抽屉 / 新标签 / 当前页 打开,不跳走、不丢当前列表。
fix(core): 免登录去掉打开视频时闪现的「账号未登录」红色 toast(回应 #2);Core 0.4.6→0.4.7
免登录伪造登录后,个别带假 cookie 的请求被服务端判 -101,页面会在打开视频瞬间闪一个红色 「账号未登录」toast(Vant 的 .van-message-error,一闪即逝)——这是 B 站原生提示、非本套件 所加。免登录开启时注入 CSS 藏掉它;不影响真登录 / 未启用免登录用户的正常错误提示。
fix(core): 免登录在个人页不伪造登录,修收藏/历史反复重刷(#2 追加);Core 0.4.5→0.4.6
收藏/历史/稍后看/清单/消息/账号等「需真登录」的个人数据页:免登录伪造登录会让页面拿假身份 取不到数据、前后端状态打架 → 反复重刷。现这些页免登录一律不碰,并清掉之前在视频/首页种下的 假 DedeUserID cookie,让它们按未登录干净处理(跳登录 / 空列表),不再重刷。视频/首页/搜索/ 他人空间等公开页照常生效。
fix(core): 跨子域设置共享 + 埋点拦截收窄,修免登录多页问题(#2 追加);Core 0.4.4→0.4.5
feat(core): 免登录看评论/动态/1080p 模块(回应 #2);Core 0.4.3→0.4.4
Issue #2:装 beefreely 等免登录脚本会与 BiliKit 抢改 fetch/XHR,时好时坏。 本次 BiliKit 自带「免登录」模块,装它即可卸载 beefreely,从根上消掉竞态。
三 agent 并行审查后硬化:responseText 补 responseType 守卫、rewriteRequest 只签 一次、wbi key 按天失效、Request 请求用克隆保 headers/signal、installNetHook 幂等。 设计与逆向记录见 docs/RESEARCH-no-login.md。
feat(feed): 抽屉「网页全屏」打开方式 + 首帧揭幕(回应 #2)
Issue #2 提到「抽屉能否默认网页全屏、更沉浸」,本次实现:
Feed 0.3.0→0.3.1 / Core 0.4.2→0.4.3
feat: 封面「真视频」秒开预览 (MSE);Feed 0.2.2→0.3.0 / Core 0.4.1→0.4.2
hover 封面用 MSE 只取 init + 头几秒 dash 分段边播边补,起播接近手机 App 原生, 热门冷门都覆盖。关键:分段字节走浏览器 fetch(原生同法,bilivideo 对本源放行 CORS、冷门也回 206),绕开 CDN 对 GM 请求的反爬 403;GM 仅作兜底。
Feed(0.3.0):
Core(0.4.2):
探针实测原生 hover(diag/home-hover-probe)→ 调研文档 docs/RESEARCH-mse-preview.md。
fix(core): 埋点面板开关+小字排版不再挤成一排;build:core 不清空 dist
feat(core): 新增「埋点拦截」模块,Core 0.3.1→0.4.0
页面世界 hook fetch/XHR/sendBeacon,拦掉行为遥测(data.bilibili.com/log/web 等)与广告投放(cm.bilibili.com),命中即短路不发起。首页性能探针实测: 空闲 72s 内约 65% 请求为埋点/广告(data.bilibili.com 一家占 62%、~4.7 次/s), 拦掉零功能损失、页面无感。