特に 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 回目に実行されたときに発生し、エラーが発生します。
返事が遅れてすみません!