使用Deezer JavaScript SDK未登录时30秒预览失效问题求助
先搞懂这个错误到底啥意思
你看到的www.deezer.com/plugins/undefined请求,说白了就是未登录状态下,SDK在尝试加载预览音频时,某个关键参数(比如曲目ID或者授权标识)没拿到有效值,变成了undefined,导致拼接请求路径时出了问题。Deezer的未登录预览功能得靠正确的曲目参数才能找到对应的预览资源,参数缺失的话,自然就发了个无效请求,预览也就跑不起来了。
一步步来解决问题
1. 给播放器明确指定要播放的曲目
你现在的代码里,onPlayerLoaded之后只是加了事件监听,但没告诉播放器要播哪首歌啊!未登录状态下,SDK没法读取用户的私人播放列表,必须显式传入有效的曲目ID来触发预览。比如在onPlayerLoaded里加这么一段:
function onPlayerLoaded() { $("#controlers input").attr('disabled', false); // 这里替换成你要测试的有效曲目ID,比如随便找一首公开曲目的ID DZ.player.playTracks([137173322], 0); // 剩下的事件订阅代码不变... }
如果是用户手动选曲,也要确保触发播放前,曲目ID是实实在在的数字,不是undefined。
2. 简化SDK初始化配置,去掉可能的冗余参数
你代码里的channelUrl是旧版Deezer SDK的配置项,现在新版SDK已经不需要这个参数了,而且你的channelUrl是HTTP的,现在Deezer强制要求HTTPS环境,这个非HTTPS的配置可能会干扰SDK的正常逻辑。直接把它删掉试试:
DZ.init({ appId: '277462', player: { container: 'player', cover: true, playlist: true, width: 650, height: 300, onload: onPlayerLoaded } });
另外,确保你的页面是在HTTPS环境下运行(本地开发用localhost没问题,浏览器会特殊处理),非HTTPS环境下,浏览器可能会拦截Deezer的资源请求,导致预览失败。
3. 检查基础配置是否正确
- 确认页面上的播放器容器ID确实是
player,别拼写错了,容器不存在的话SDK也会出各种奇怪的问题。 - 不是所有曲目都支持未登录预览,尽量选热门的正版曲目测试,避免用那些特殊授权的曲目。
4. 加个调试日志看看状态
可以在onPlayerLoaded里加几行日志,看看SDK的状态,方便排查:
function onPlayerLoaded() { console.log("播放器加载完成,SDK状态:", DZ); console.log("当前登录状态:", DZ.getLoginStatus()); // 其他代码... }
通过控制台的日志,你能清楚看到SDK有没有正确识别未登录状态,以及有没有其他参数异常。
最后总结一下
这个问题的核心就是未登录时SDK没拿到有效的播放参数,导致请求路径错了。按照上面的步骤,先给播放器指定明确的曲目,再简化初始化配置,基本就能解决30秒预览的问题了。
内容的提问来源于stack exchange,提问作者Denoide

