1

特に Internet Explorer (バージョン 7、8、および 9 でテスト済み) で Sound Cloud カスタム html5 プレーヤー (http://developers.soundcloud.com/docs/custom-player) を使用すると問題が発生します。

プレーヤーが作成されるたびに (現在、これは JS を介して動的に行われます)、「sc-player.js」ファイル (ここでサウンド クラウドによって提供されます) の関数でエラーが発生しているようです。

エラーは、「値またはプロパティ '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 引数は音楽トラックのサウンドクラウド ページへのリンクであり、#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 関数が 2 回目に実行されたときに発生し、エラーが発生します。

返事が遅れてすみません!

4

1 に答える 1

0

この行は間違っています:

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

残りのコードが必要なので、それ以上のことはできません...

于 2012-04-10T14:45:55.367 に答える