Repository navigation
Releases
Releases · YardonYan/dsh-plugin-netease-lyrics
v1.0.7 — 歌词定位改为 DOM 注入,宿主 UI 更新不再漂移
修复
- 宿主 UI 更新后歌词漂到页面角落、不再贴状态行的根因:歌词用
position: fixed+ 视口坐标定位,而 fixed 会被任何带 CSStransform的祖先截获 —— 宿主新版在输入框区域引入了 transform,坐标体系整个失效。 - 渲染层重写为 DOM 注入:歌词 span 直接插入状态行元素的父容器、紧跟其后流式排布,自动继承宿主的滚动 / transform / 布局 —— 宿主以后改 UI 也不会再漂移。字体字号颜色仍从状态行实时克隆。
- 悬停翻译改用原生
title属性。
升级
刷新页面即可(client.js 改动不需要重启宿主)。
v1.0.6 - 修复软限流下的故障转移
修复
- 抓到限流的第三种形态:
POST /api/search/get/web有时不返回 405、也不返回空,而是把result替换成一串加密哈希垃圾(软限流)。旧故障转移逻辑把这种响应当成"干净的搜索无结果"直接放弃,不会尝试备用端点 —— 导致 1.0.5 的故障转移在软限流下失效,歌词照样空白 - 修复:主端点只要拿不到有效的
result.songs数组(无论 405、哈希垃圾还是空)一律尝试备用端点;只有备用端点也拿不到才算真无结果 - 端到端实测:主端点软限流 + 备用端点正常的环境下,《Wake up》(谢帝)成功拿到 2277 字符歌词
升级说明
更新后重启 DSH。
v1.0.5 - 双端点搜索故障转移
修复
- 实测发现 music.163.com 的限流窗口远比预想长(一小时以上),60 秒退避后重试仍会撞 405,歌词可能长时间空白
- 搜索增加双端点故障转移:主端点
POST /api/search/get/web被限流时,自动切换到GET /api/search/get变体 —— 两个端点限流计数独立,实测主端点被封时备用端点仍正常返回结果;歌词直查接口/api/song/lyric与搜索限流独立,不受此问题影响 - 干净的"无结果"回答不会浪费备用端点调用,只有限流/网络错误才触发转移
历史版本情况
- 1.0.4:修复切歌后歌词消失,限流窗口内做 60 秒负缓存
- 1.0.3:加固 Host 端,插件激活失败不再拖垮整个 web 端(
web boot: 1 entry did not activate) - 1.0.2 / 1.0.1:修复 Client 端启动崩溃
升级说明
更新后重启 DSH 即可。限流期间歌词最坏延迟为"下一首换歌时",不再按天空白。
v1.0.2 修复宿主无法启动
修复真正让宿主起不来的问题。1.0.0 与 1.0.1 都带这个缺陷,请升级到本版本。
根因
- 客户端插件的 apply 会去宿主上下文里取配置:ctx.config、ctx.options、ctx.plugin.config
- 宿主内核启动早期,cordis 上下文中那些尚未注册的属性,读取就会抛异常
- 异常被 fiber 的日志层吞掉,插件静默进入 failed,宿主随即拒绝启动整个 web 端,表现是双击没反应、也没有窗口
- 1.0.1 修的是「等 slots 就绪」,方向没错,但异常发生在那一行之前,所以对本次故障无效
本次改动
- anchorText 只从 apply 的第二个参数读取,彻底删除探测宿主上下文的整条路径
- 错误提示改用 console 输出,不再触碰 ctx.logger。错误处理路径本身也可能因同类访问而抛异常,那样等于没兜住
- 保留等待式挂载(ctx.inject(['slots']))与宿主无该接口时的直接挂载兜底
验证
- 新增两条针对根因的测试:一条用记录型 Proxy 断言 apply 不读 ctx.config、ctx.options、ctx.plugin;一条用「任何属性访问都抛异常」的 Proxy 断言异常不会外泄
- 把 client.js 退回 1.0.1 再跑同一批测试,这两条立刻变红,确认测试能咬住这个缺陷
- npm test 9 条全绿
- 修复后宿主连续两轮完整启动,控制台 did not activate 计数为 0
配置说明
anchorText 配在插件 patch insert 的 config 字段里,由宿主作为 apply 的第二个参数传入。不要让代码去 ctx 上找配置,这正是本次崩溃的来源。
完整变更记录见仓库根目录的 CHANGELOG.md。
v1.0.1 修复启动崩溃
此版本存在启动崩溃问题:客户端插件激活失败会让宿主无法启动。请改用 v1.0.2。
修复一个会让宿主直接起不来的问题。1.0.0 请勿继续使用,直接升级到本版本。
修复了什么
- 客户端在宿主启动阶段读取 slots 服务,而那一刻该服务通常还没挂载,读取直接抛异常
- 宿主对客户端插件激活失败是零容忍:一个插件失败,整个 web 端就拒绝启动,表现是双击没反应、也没有窗口
- 现在改为等待 slots 服务就绪后再注册歌词行,取不到就静默待命。最坏情况只是不显示歌词,应用永远能启动
验证方式
- 新增 6 条回归测试,覆盖服务缺失、服务延迟就绪、注册过程抛错三种情况,npm test 全绿
- 把 client.js 退回修复前再跑同一批测试,6 条里 5 条变红,确认这批测试确实能抓住该缺陷,不是摆设
- 插件在 DSH 里的实际显示效果仍需在 Windows 上人工确认一次
��级方式
本地目录安装的,重新执行一次安装命令后重启 dsh web:
dsh plugin --profile web add "<仓库路径>" --save-exact
完整变更记录见仓库根目录的 CHANGELOG.md。
v1.0.0 首个公开版本
此版本存在启动崩溃问题:客户端插件激活失败会让宿主无法启动。请改用 v1.0.2。
首个公开发布。
桌面网易云音乐在放什么,DeepSeek Harness 输入框上方的状态行右边就浮现当前那句歌词,同字体、同字号、同颜色,看起来只是那句话有点长。
新增
- 通过系统媒体传输控件读取桌面网易云音乐的播放状态,宿主端常驻 worker 每秒上报一次
- 宿主端按歌名与歌手检索并拉取歌词,合并原文与翻译,按歌曲维度缓存七天
- 浏览器端每秒轮询播放状态,把当前演唱行贴在状态行右侧,字体、字号、颜色从状态行实时克隆
- 播放进度由宿主端秒表推算,切歌归零、暂停停表、恢复续走
- 宿主状态行不存在时不渲染,���持隐蔽
- 歌词路由只响应回环地址并校验 Origin,防 DNS rebinding
- 悬停歌词显示完整句子与翻译,浮层不拦截点击,下方控件照常可用
- 支持 anchorText 配置,适配非中文界面
- 中英文界面文案
安装
环境要求:Windows 宿主、桌面版网易云音乐,并已在设置中打开系统媒体控件开关。
dsh plugin --profile web add "<仓库路径>" --save-exact
安装后重启 dsh web,再刷新页面。
已知限制
拖动进度条后歌词会漂移,单曲循环时秒表会走出歌尾,纯音乐与翻唱版本可能匹配到错误歌词。完整列表见 README 的注意事项与已知限制一节。
完整变更记录见仓库根目录的 CHANGELOG.md。