CoffeeScript - 等效的JS代码无法播放嵌入式Youtube视频

时间:2012-02-06 19:20:35

标签: javascript coffeescript youtube-javascript-api

我正在使用swfObject在网站上嵌入Youtube视频,因此我可以使用Youtube Player API对其进行操作。但是,我正在使用Coffeescript重写网站,并坚持这个问题。

这是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不是一个功能
  return ytplayer.playVideo();

1 个答案:

答案 0 :(得分:3)

这很可能是因为在您尝试播放YouTube视频之前,YouTube播放器尚未完成加载。

试试这个:

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

这会将您的代码放入YouTube使用的onYouTubePlayerReady callback中,以告知您播放器已准备就绪。

我假设JS代码有效,因为你在Firebug中运行它?如果是这样,这是有道理的,因为当您将该命令输入控制台时,很可能会加载YouTube播放器。