2

swfObjectを使用してWebサイトにYoutubeビデオを埋め込んでいるので、YoutubePlayerAPIを使用して操作できます。しかし、私は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は関数ではありません
returnytplayer.playVideo();

4

1 に答える 1

3

これは、YouTube動画を再生する前にYouTubeプレーヤーの読み込みが完了していないことが原因である可能性があります。

これを試して:

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

これにより、YouTubeがプレーヤーの準備ができたことを通知するために使用するonYouTubePlayerReadyコールバックにコードが配置されます。

Firebug内で実行したため、JSコードが機能したと思いますか?もしそうなら、それは理にかなっています。なぜなら、コンソールにそのコマンドを入力するまでに、YouTubeプレーヤーがロードされる可能性が高いからです。

于 2012-02-06T20:40:00.697 に答える