0

Soundcloud JavaScript API を使用して、トラックの検索結果を使用してプレーヤー ウィジェットのページを動的に生成したいと考えています。私のコードは次のとおりです。

<html>
<head>
<script src="http://connect.soundcloud.com/sdk.js"></script>

<script>
function makeDivsFromTracks(tracks,SC)
{
 var track;
 var permUrl;
 var newDiv;
 for(var ctr=0;ctr<tracks.length;ctr++)
 {
  newDiv=document.createElement("div");
  newDiv.id="track"+ctr;
  track=tracks[ctr];
  SC.oEmbed(track.permalink_url,{color:"ff0066"},newDiv);
  document.body.appendChild(newDiv);
 }
}
</script>

</head>
<body>

<script>
SC.initialize({
    client_id: 'MY_CLIENT_ID'
});
SC.get('/tracks',{duration:{to:900000},tags:'hitech',downloadable:true},
        function(tracks,SC)
        {
         makeDivsFromTracks(tracks,SC);
        });
</script>

</body>
</html> 

これをロードすると、SC.oEmbed()呼び出しでエラーがスローされます。

Uncaught TypeError: Cannot call method 'oEmbed' of null 

s が生成されていないか、検索結果が返されていないことを示しているように見えますdivが、呼び出しを削除して次のSC.oEmbed()ように置き換えると:

newDiv.innerHTML=track.permalink_url;

次に、検索結果の URL の優れたリストを取得します。

divそして、静的および静的URLを使用してウィジェットを作成すると、たとえば

<body>
<div id="putTheWidgetHere"></div>
<script>
SC.initialize({
    client_id: 'MY_CLIENT_ID'
});
SC.oEmbed("http://soundcloud.com/exampleTrack", {color: "ff0066"},  document.getElementById("putTheWidgetHere"));
</script>
</body>

それもうまくいきます。oEmbed()では、これらの動的に作成された要素を使用した呼び出しの問題は何ですか?

4

1 に答える 1

1

解決しました。SCコールバック関数 と から引数を取り出したところ、makeDivsFromTracks()すべてのプレイヤーが表示されるようになりました。なぜこれが機能するのか正確にはわかりません.SDKスクリプトリファレンスで定義されているSCオブジェクトに関係しているので、グローバルに利用可能であり、関数に渡す必要はありません.

とにかく、作業コードは次のとおりです。

<html>
<head>
<script src="http://connect.soundcloud.com/sdk.js"></script>

<script>
function makeDivsFromTracks(tracks)
{
 var track;
 var permUrl;
 var newDiv;
 for(var ctr=0;ctr<tracks.length;ctr++)
 {
  newDiv=document.createElement("div");
  newDiv.id="track"+ctr;
  track=tracks[ctr];
  //newDiv.innerHTML=track.permalink_url;
  SC.oEmbed(track.permalink_url,{color:"ff0066"},newDiv);
  document.body.appendChild(newDiv);

 }
}
</script>

</head>
<body>

<script>
SC.initialize({
    client_id: 'MY_CLIENT_ID'
});
SC.get('/tracks',{duration:{from:180000,to:900000},tags:'hitech',downloadable:true},function

(tracks){makeDivsFromTracks(tracks);});
</script>

</body>
</html>
于 2013-03-12T08:08:02.840 に答える