CoffeeScript - эквивалентный код JS не работает для воспроизведения встроенного видео на Youtube - PullRequest
2 голосов
/ 06 февраля 2012

Я встраиваю видео с YouTube на веб-сайт, используя swfObject, чтобы я мог управлять им с помощью 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();

Тем не менее, эквивалентный (я думаю) код кофейного кода НЕ:

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 Ответ

3 голосов
/ 07 февраля 2012

Скорее всего, потому что проигрыватель YouTube не завершил загрузку, прежде чем пытаться воспроизвести видео YouTube.

Попробуйте это:

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

Это помещает ваш код в обратный вызов onYouTubePlayerReady , который YouTube использует, чтобы вы знали, что плеер готов.

Я предполагаю, что код JS работал, потому что вы запускали его внутри Firebug?Если это так, то это будет иметь смысл, потому что к тому времени, когда вы введете эту команду в консоль, проигрыватель YouTube, скорее всего, будет загружен.

...