1

我在使用 Sound Cloud 自定义 html5 播放器 (http://developers.soundcloud.com/docs/custom-player) 时遇到了一些问题,特别是在 Internet Explorer 上(在版本 7、8 和 9 上测试)。

似乎无论何时创建播放器(现在这是通过 JS 动态创建的),它都会遇到“sc-player.js”文件中的函数错误(此处由 sound cloud 提供)。

错误是“无法获取值或属性'id':对象为空或未定义”。这是搞砸的代码:第 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,但是我已经在页面上隐藏了这个列表,所以真的不应该那个 click 事件甚至不应该触发吗?我曾尝试一起删除点击事件,但这似乎会导致播放器出现许多其他问题。

只是想知道是否有其他人经历过这种情况或知道如何解决它?

编辑 -

我手动在轨道上附加了“测试”数据。这似乎解决了第一个错误,但当然会带来另一个错误。这一次,这一行出现了同样的错误(在 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 函数时出现错误。

回复较晚,抱歉!

4

1 回答 1

0

这一行是错误的:

trackId = $track.data('sc-track').id,

我不能帮助你更多,因为我需要其余的代码......

于 2012-04-10T14:45:55.367 回答