检查清单
当前系统环境
Windows 11
当前版本
v1.1.0
具体信息
复现步骤
- 在 SPlayer-Next 中通过「设置 → 插件 → 导入插件(URL)」导入第三方 LX 音源脚本并启用,我导入的是付费版ikun音源;
- 搜索并播放任意一首网易云 VIP 歌曲(例:蔡健雅《红色高跟鞋》,网易云 songId
208902,fee:1);
- 观察播放结果。
预期行为
插件向第三方解析服务请求,返回可播放的无损 / 高品 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 下失效。
建议修复
- 补全插件宿主
console API:在注入给 LX 脚本的 console 上实现 group / groupEnd / groupCollapsed(可做成 no-op 或转发到主进程日志),与洛雪桌面端行为对齐。这样能惠及所有调用日志分组的 LX 插件。
- 修正
musicInfo 数据形状:无值时传 null/undefined 或省略该键,而非空字符串;或在 normalizeLxMusicInfo 中把网易云的 id/songmid 作为主 ID 可靠透传,避免破坏插件的 ?? 兜底逻辑。
检查清单
当前系统环境
Windows 11
当前版本
v1.1.0
具体信息
复现步骤
208902,fee:1);预期行为
插件向第三方解析服务请求,返回可播放的无损 / 高品 URL,歌曲正常播放。
实际行为
歌曲无法播放,提示「该歌曲仅提供试听,请在设置中允许试听播放」。
日志证据
%APPDATA%/SPlayer-Next/app-data/logs/<日期>.log中,每次播放网易云 VIP 歌曲会出现两个报错(先后暴露):修复第一处后,又暴露第二处:
根因分析
问题 1:插件宿主的
console对象缺少group/groupEndSPlayer-Next 在
electron/main/plugins/给 LX 脚本注入的console只实现了log/error/warn等基础方法,没有提供group/groupEnd/groupCollapsed。而洛雪音乐桌面端(LX Music)的脚本运行环境自带
console.group/groupEnd,许多第三方脚本(如本例)在拿到结果后会调用:在 SPlayer-Next 沙箱中这一句直接抛
TypeError,脚本在returnURL 之前崩溃 →resolveUrl被 reject → 回落到官方网易云试听片段 → 显示「仅提供试听」。该崩溃与歌曲、登录态、第三方后端凭证均无关,必现。问题 2:
normalizeLxMusicInfo把无值的hash传成空串""而非null插件取歌曲 ID 的常规写法:
对网易云曲目,宿主传入的
musicInfo.hash是空字符串""(不是null/undefined)。??仅当左侧为null/undefined时取右侧,空串不视为空值,于是"" ?? "208902"结果仍为"",songId变空 → 第三方解析服务拒收「参数错误」。洛雪桌面端在无 hash 时不会给"",因此该写法在洛雪下正常、在 SPlayer-Next 下失效。建议修复
consoleAPI:在注入给 LX 脚本的console上实现group/groupEnd/groupCollapsed(可做成 no-op 或转发到主进程日志),与洛雪桌面端行为对齐。这样能惠及所有调用日志分组的 LX 插件。musicInfo数据形状:无值时传null/undefined或省略该键,而非空字符串;或在normalizeLxMusicInfo中把网易云的id/songmid作为主 ID 可靠透传,避免破坏插件的??兜底逻辑。