Skip to content

专注模式:从带 mdg_reader 的地址打开时,等 B站 页面接管完再放进字幕栏 - #431

Merged
PathGao merged 1 commit into
mainfrom
fix/reader-part-switch
Oct 27, 2026
Merged

PathGao merged 1 commit into
mainfrom
fix/reader-part-switch

Conversation

@PathGao

@PathGao PathGao commented Oct 27, 2026

Copy link
Copy Markdown
Owner

改了什么

从带 mdg_reader=1 的地址打开专注模式(摘读记录、分拣台、扩展更新后重载)时,B站 这次访问里切不了分 P:点分 P 列表、播放器的「下一个」、自动连播都没反应,退出专注模式也不恢复。弹窗按钮在页面加载完后才进,不受影响。

原因是内容脚本在 document_idle 就把字幕栏插进 .left-container,这时 B站 还没接管服务器渲染的页面(#app 还带 data-server-rendered),实测早了约 0.5 秒。

  • ensureReaderPlayerMounted 每次尝试前先看 pageHydrating():站点配置了 reader.hydrating(B站 是 [data-server-rendered])且页面上还有,就等一轮。最多等到导航后 10 秒,免得哪类页面一直留着这个标记时进不去。YouTube 没配,不变。
  • content.selftest.js 加 V8。顺带还原了前面一个测试换掉后没还原的 currentSite,后面调到真挂载的测试原来靠它的残留读站点配置。

验证

  • node scripts/selftest.mjs:39 个通过。去掉 pageHydrating() 那一段,V8 失败。
  • Chrome(ego),B站 BV164411b7dx(112 P):
    • 修前:?mdg_reader=1 打开后,player.next()、点列表、自动连播都不换 P;?mdg_reader=0(不进专注模式)正常;把进入推迟 6 秒正常;不插字幕栏正常。
    • 修后:字幕栏在 data-server-rendered 去掉后约 60 ms 插入;player.next() 切到 P2,专注模式跟着重读 P2 的字幕;扩展无报错。
  • 没测到:番剧页、活动页、/list/ 播放页、YouTube。

页面还是服务器渲染的那份(#app 上有 data-server-rendered)时就插入字幕栏,B站 这次访问里点分 P 列表、下一个、自动连播都切不了分 P,退出专注模式也不恢复。挂载播放器前等这个标记消失,最多等到导航后 10 秒。顺带修了 content.selftest.js 里一个没还原 currentSite 的测试。
@PathGao
PathGao merged commit f87370b into main Oct 27, 2026
2 checks passed
@PathGao
PathGao deleted the fix/reader-part-switch branch October 27, 2026 03:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant