2013-03-12 33 views
0

使用Soundcloud JavaScript API时,我想使用曲目搜索结果动态生成一个播放器小部件页面。我的代码如下:“动态生成嵌入Soundcloud播放器时无法调用方法'空'空'Div

<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 

这似乎表明,要么不产生或搜索的div小号结果没有返回,但如果我删除SC.oEmbed()呼叫,将其替换为:

newDiv.innerHTML=track.permalink_url; 

然后我得到的URL的一个很好的列表我的SE拱结果。

如果我使用静态的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()会出现什么问题?

回答

1

解决了它。我从回调函数makeDivsFromTracks()中拿出了SC的参数,现在所有的玩家都出现了。不确定为什么这会起作用 - 也许它与在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> 
+0

使用appendTo如何追加SC.oEmbed玩家UL>里? – jpcmf80 2015-04-26 03:50:25