2013-07-09 63 views
1

我有下面的代碼,在那裏我希望能夠CONSOLE.LOG出的播放列表中的視頻列表:getPlayList()中的YouTube API返回空數組

function onYouTubePlayerReady(playerId) { 
     ytplayer = document.getElementById("myytplayer"); 

     ytplayer.cuePlaylist({ 
      list:"PLf71xE2jRgTXB_LeUJkXxFwCc4r1z5if3" 
     }); 
     console.log(ytplayer.getPlaylist()); 
} 

但getPlayList()方法只是返回一個空數組。

如果我從這個函數的外部調用getPlaylist(),它會返回正確的數組。爲什麼這個方法在這裏返回一個空數組?我怎樣才能得到播放列表數組?

非常感謝。

回答

0

我自己偶然發現了這個問題。這個問題似乎是對玩家的一個怪癖,以及YouTube(谷歌)如何定義「準備就緒」

看起來玩家的onReady函數在玩家的「chrome」已完成渲染時觸發(即它是綁定了HTML文檔)。實際播放器數據(視頻或播放列表)是異步加載的,因此可以在某個任意點之後準備好。

我把一個簡單的變通到位,着眼於玩家的狀態更改事件

var firstLoad = true; 
function onPlayerStateChange(e) { 
    if (firstLoad && e.data == YT.PlayerState.CUED) { 
     //First Cued event - playlist is now available 
     firstLoad = false 
     myPlaylistFunction(player.getPlaylist()); 
    } 
}