2012-02-06 61 views
2

我在使用swfObject的網站上嵌入Youtube視頻,所以我可以使用Youtube Player API來操縱它。但是,我正在重寫Coffeescript網站,並且陷入了這個問題。CoffeeScript - 等效JS代碼無法播放嵌入式Youtube視頻

下面是HTML:

<html> 
<head> 

<meta charset="UTF-8"> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 
    <script type="text/javascript" src="js/swfobject.js">//embedding youtube videos</script> 
    <script type="text/javascript" src="coffee/test.js"></script> 

</head> 

<body> 
<div id="ytplayer"> 
    <p>You will need Flash 8 or better to view this content.</p> 
</div> 
</body> 
<script type="text/javascript"> 
     var params = { allowScriptAccess: "always" }; 
     swfobject.embedSWF("http://www.youtube.com/v/yeClJneSNXA&enablejsapi=1&playerapiid=ytplayer", "ytplayer", "425", "365", "8", null, null, params); 
</script> 
</html> 

下面的代碼工作:

ytplayer = document.getElementById('ytplayer'); 
ytplayer.playVideo(); 

然而,當量(我認爲)的CoffeeScript代碼不:

ytplayer = document.getElementById("ytplayer") 
ytplayer.playVideo() 

哪個編譯到以下JS:

(function() { 
    var ytplayer; 

    ytplayer = document.getElementById("ytplayer"); 

    ytplayer.playVideo(); 

}).call(this); 

它給了我下面的錯誤在Firebug:

ytplayer.playVideo is not a function
return ytplayer.playVideo();

+1

是的代碼是等效的。你如何包括你的咖啡腳本?預編譯,還是通過內聯編譯器? – TimWolla 2012-02-06 19:35:22

+0

我在終端上編譯它並鏈接到js。編輯上面的HTML來顯示包含。 – CHawk 2012-02-06 19:51:13

+1

你看過編譯後的輸出了嗎? – TimWolla 2012-02-06 19:54:48

回答

3

這很可能是因爲您嘗試播放YouTube的視頻前的YouTube播放器還沒有完成加載。

試試這個:

window.onYouTubePlayerReady = (playerid) -> 
    ytplayer = document.getElementById(playerid) 
    ytplayer.playVideo() 

這使你的代碼在YouTube使用,讓你知道玩家準備了onYouTubePlayerReady callback

我假設JS代碼工作,因爲你在Firebug裏面運行它?如果是這樣,那將是有道理的,因爲當您將該命令輸入到控制檯時,YouTube播放器很可能會被加載。

相關問題