2016-01-16 70 views
1

似乎我缺少明顯的東西在這裏,但我不能讓不能火「loadVideoByUrl(‘...’)」的Youtube的iframe-API的 - 未定義

var tag = document.createElement('script'); 
tag.src = "https://www.youtube.com/iframe_api"; 

var firstScriptTag = document.getElementsByTagName('script')[0]; 
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 

var player; 
function onYouTubeIframeAPIReady() { 
    player = new YT.Player('player1'); 
    // here everything is fine and I can see the 
    // function as part of player 
    console.log(player); 
    // but here it says "player.loadVideoByUrl()" undefined 
    player.loadVideoByUrl("https://youtu.be/bHQqvYy5KYo"); 
    player.playVideo(); 
} 

工作。有任何想法嗎?

在此先感謝!

+0

請問,爲什麼不添加iframe_api作爲頁面中的靜態腳本?這是Youtube提供的方式嗎? –

+0

它是YouTube官方文檔的一部分:https://developers.google.com/youtube/iframe_api_reference直到現在,從未想過它。 – Jonathan

+0

我看到了,與我們的案例無關,我在下面添加了一個答案。 –

回答

2

我假設player在您調用loadVideoByUrl函數時未初始化。在文檔中,他們使用

events: { 
     'onReady': onPlayerReady, 
     'onStateChange': onPlayerStateChange 
     } 

玩家的事件。看起來玩家對象是異步構造的。因此,如果您使用這些事件,代碼將變成下圖所示:

var tag = document.createElement('script'); 
tag.src = "https://www.youtube.com/iframe_api"; 

var firstScriptTag = document.getElementsByTagName('script')[0]; 
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 

var player; 
function onYouTubeIframeAPIReady() { 
    player = new YT.Player('player1', { 
     events: { 
     'onReady': onPlayerReady 
     } 
    }); 
} 

function onPlayerReady(){ 
    player.loadVideoByUrl("https://youtu.be/bHQqvYy5KYo"); 
    player.playVideo(); 
}