У меня возникли некоторые проблемы при работе с пользовательским html5-плеером Sound Cloud (http://developers.soundcloud.com/docs/custom-player), особенно в Internet Explorer (проверено на версиях 7, 8 и 9).
Кажется, всякий раз, когда создается проигрыватель (сейчас это происходит динамически через JS), он сталкивается с ошибкой с функцией в файле «sc-player.js» (предоставляется звуковым облаком здесь).
Ошибка: «Невозможно получить значение или свойство «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;
});
Я понимаю, что это попытка найти идентификатор дорожки в сгенерированном списке, однако я скрыл этот список на странице, так что на самом деле это событие щелчка не должно даже срабатывать? Я попытался удалить событие щелчка все вместе, но это, похоже, вызывает ряд других проблем с проигрывателем.
Просто интересно, кто-нибудь еще сталкивался с этим или знает, как обойти это?
РЕДАКТИРОВАТЬ -
Я вручную приложил "тестовые" данные к треку. И это, кажется, устраняет первую ошибку, но, конечно же, вызывает другую. На этот раз такая же ошибка выплевывается на эту строку (в файле 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
. Можете ли вы убедиться, что элемент имеет атрибутdata-sc-track
? - person nickf   schedule 11.04.2012