Skip to content

【Bug】第三方 LX 音源插件解析失败:插件宿主 consolegroupEnd,且 musicInfo.hash 传空串导致取不到歌曲 ID #231

Description

@hero-sky

检查清单

  • 我已检索仓库中所有的 Issues,确保我没有重复提交问题;或有相似 Issue,但我觉得我的情况不包含在那个相似 Issue 之内
  • 我已经找到了可以复现这个问题的方法,并且写在了下面的「具体信息」中
  • 此问题可以在我的设备和当前环境中稳定复现
  • 此问题可以在最新版本 (Latest Release) 中复现
  • 此问题是在我更新到当前版本后出现的

当前系统环境

Windows 11

当前版本

v1.1.0

具体信息

复现步骤

  1. 在 SPlayer-Next 中通过「设置 → 插件 → 导入插件(URL)」导入第三方 LX 音源脚本并启用,我导入的是付费版ikun音源;
  2. 搜索并播放任意一首网易云 VIP 歌曲(例:蔡健雅《红色高跟鞋》,网易云 songId 208902fee:1);
  3. 观察播放结果。

预期行为

插件向第三方解析服务请求,返回可播放的无损 / 高品 URL,歌曲正常播放。

实际行为

歌曲无法播放,提示「该歌曲仅提供试听,请在设置中允许试听播放」。

日志证据

%APPDATA%/SPlayer-Next/app-data/logs/<日期>.log 中,每次播放网易云 VIP 歌曲会出现两个报错(先后暴露):

(plugin)   resolveUrl rejected ikun TypeError: console.groupEnd is not a function
(default)  Error occurred in handler for 'plugin:resolveUrl': TypeError: console.groupEnd is not a function

修复第一处后,又暴露第二处:

(plugin)   resolveUrl rejected ikun Error: 参数错误: source, musicId, quality 不能为空

根因分析

问题 1:插件宿主的 console 对象缺少 group / groupEnd
SPlayer-Next 在 electron/main/plugins/ 给 LX 脚本注入的 console 只实现了 log / error / warn 等基础方法,没有提供 group / groupEnd / groupCollapsed
而洛雪音乐桌面端(LX Music)的脚本运行环境自带 console.group/groupEnd,许多第三方脚本(如本例)在拿到结果后会调用:

if (env !== "mobile") console.groupEnd();

在 SPlayer-Next 沙箱中这一句直接抛 TypeError,脚本在 return URL 之前崩溃 → resolveUrl 被 reject → 回落到官方网易云试听片段 → 显示「仅提供试听」。该崩溃与歌曲、登录态、第三方后端凭证均无关,必现。

问题 2:normalizeLxMusicInfo 把无值的 hash 传成空串 "" 而非 null
插件取歌曲 ID 的常规写法:

const songId = musicInfo.hash ?? musicInfo.songmid;

对网易云曲目,宿主传入的 musicInfo.hash空字符串 ""(不是 null/undefined)。?? 仅当左侧为 null/undefined 时取右侧,空串不视为空值,于是 "" ?? "208902" 结果仍为 ""songId 变空 → 第三方解析服务拒收「参数错误」。洛雪桌面端在无 hash 时不会给 "",因此该写法在洛雪下正常、在 SPlayer-Next 下失效。

建议修复

  1. 补全插件宿主 console API:在注入给 LX 脚本的 console 上实现 group / groupEnd / groupCollapsed(可做成 no-op 或转发到主进程日志),与洛雪桌面端行为对齐。这样能惠及所有调用日志分组的 LX 插件。
  2. 修正 musicInfo 数据形状:无值时传 null/undefined 或省略该键,而非空字符串;或在 normalizeLxMusicInfo 中把网易云的 id/songmid 作为主 ID 可靠透传,避免破坏插件的 ?? 兜底逻辑。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions