我在使用 Sound Cloud 自定义 html5 播放器 (http://developers.soundcloud.com/docs/custom-player) 时遇到一些问题,特别是在 Internet Explorer 上(在版本 7、8 和 9 上进行了测试)。
似乎每当创建播放器时(现在是通过 JS 动态创建的),“sc-player.js”文件(由 sound cloud here 提供)中的函数都会遇到错误。
错误是“无法获取值或属性“id”:对象为 null 或未定义”。这是困惑的代码:第 640 行字符 9
// selecting tracks in the playlist
$('.sc-trackslist li').live('click', function(event) {
var $track = $(this),
$player = $track.closest('.sc-player'),
trackId = $track.data('sc-track').id,
play = $player.is(':not(.playing)') || $track.is(':not(.active)');
if (play) {
onPlay($player, trackId);
}else{
onPause($player);
}
$track.addClass('active').siblings('li').removeClass('active');
$('.artworks li', $player).each(function(index) {
$(this).toggleClass('active', index === trackId);
});
return false;
});
我知道这是试图在生成的列表中查找轨道的 id,但是我已在页面上隐藏了此列表,所以真的不应该触发该单击事件吗?我已尝试将点击事件全部删除,但这似乎会导致播放器出现许多其他问题。
只是想知道是否有其他人经历过这种情况或知道如何解决它?
编辑-
我手动将“测试”数据附加到轨道上。这似乎解决了第一个错误,但当然又带来了另一个错误。这次,这一行(在 sc-player.js 文件中)出现了同样的错误:
getPlayerData = function(node) {
return players[$(node).data('sc-player').id];
}
这是我用来调用播放器的代码,track 参数是音乐轨道 soundcloud 页面的链接,#player 是在其上创建的空 div:
function init_player(track,title) {
$('.open #player').scPlayer({
links: [{url: track, title: title}],
beforeRender : function(tracksData) {
$scplayer = $(this);
$('.sc-trackslist li, .sc-trackslist li a').data({ id: track});
}
}
当用户想要切换到音乐的另一部分时,我有另一个函数清空容器 div,将 #player 附加到它(因为它被 soundcloud 播放器覆盖),然后重新运行上述函数。
我的问题是在第二次运行 init_player 函数时,出现错误。
抱歉回复延迟!
最佳答案
这一行是错误的:
trackId = $track.data('sc-track').id,
我无法为您提供更多帮助,因为我需要其余的代码...
关于javascript - Soundcloud 自定义播放器 - "id property is null"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10090616/