2011-01-17 8 views
3

私は多くのyoutubeプレーヤーと単一のHTMLを持っています。ページの複数のyoutubeプレーヤーのプレーヤーの状態を取得する

私はonStateChangeを使用して、ユーザーがビデオを再生したときに通知を受け取ります。

function onYouTubePlayerReady(playerid) { 
    var player = document.getElementById("playerA"); 
    player.addEventListener("onStateChange", "callback"); 
} 

ここで、コールバックはnewStateをパラメータとして取得します。

​​

これは、1人のプレイヤーのみで問題なく動作します。 しかし、多くのプレーヤーでは、StateChangeイベントを発生させたプレーヤーをどのように知ることができますか?コールバックには1つのパラメータしかありません。

イベント・フォームのコールバックを発生させたプレイヤーを知る方法はありますか、それともそれぞれのコールバックを設定する必要がありますか?

+0

私は別の解決策をここに掲載しました:http://stackoverflow.com/questions/6802432/how-to-display-multiple-youtube-videos-without-overlapping-audio/7208565#7208565 –

答えて

3

は、他の回答に基づいて、私のソリューションです:

(1)追加しますidオブジェクトおよび/または埋め込みタグへのパラメータ

(2)ビデオURLにplayerapiidパラメータを追加します(01と一致する必要があります))

<object id="video1" data="http://www.youtube.com/v/AAAAAAAAAAA&version=3&enablejsapi=1&playerapiid=video1" ...> 
    <embed ...> 
</object> 
<object id="video2" data="http://www.youtube.com/v/BBBBBBBBBBB&version=3&enablejsapi=1&playerapiid=video2" ...> 
    <embed ...> 
</object> 

(3)各ビデオのための名前のコールバック関数を作成し、onYouTubePlayerReadyイベントでプレイヤーに割り当てます。これを行う方法の1つがあります:

function onYouTubePlayerReady(playerApiId) { 
    var player = document.getElementById(playerApiId); 
    window["onStateChange" + playerApiId] = function(state) { 
    console.log("#" + playerApiId + ": new state " + state); 
    }; 
    player.addEventListener("onStateChange", "onStateChange" + playerApiId); 
} 

私はdemo hereを発行しました。

+0

これは私のために働いた。私は数日間このソリューションを探していました!ありがとう! – Paolo

2

私はまったく同じ問題を抱えていました。ここに私の解決策があります:

次に、閉鎖によって必要な変数にアクセスできます。理想的には、addEventListener()で無名関数を使用するだけでも構いませんが、ActionScript/Javascriptブリッジの制限により不可能です。

がこの議論に触発さ:アドビ、Flashのイベントリスナーに使用できる文字の上に追加の制限を課しているためalalondeのソリューション@http://groups.google.com/group/youtube-api-gdata/browse_thread/thread/e8a8c85b801b9e25

1

はもう動作しません。 []または()を使用することはできません。これにより、この問題に関する以前の解決策は廃止されました。これらの文字は、次のJavaScriptエラーを生成します。ここでは

identifier starts immediately after numeric literal

は(ピリオド文字を使用して)私のソリューションです:ここで

var players = {}; // global to keep track of all players on the page 
function onYouTubePlayerReady (idPlayer) { 
    var ytPlayer = document.getElementById (idPlayer); 
    var idPlayerParams = 'yt' + Math.floor (Math.random()*100000); // create random varable name 
    players [idPlayerParams] = { 
     idPlayer: idPlayer, 
     onStateChanged: function (state) { 
      alert ('youtube player state changed to: ' + state + ', player id: ' + idPlayer); 
     }, 
     onError: function (err) { 
      alert ('youtube player error: ' + err + ', player id: ' + idPlayer); 
     } 
    }; 
    ytPlayer.addEventListener ('onStateChange', 'players.' + idPlayerParams + '.onStateChanged'); 
    ytPlayer.addEventListener ('onError', 'players.' + idPlayerParams + '.onError'); 
} 
+0

注:この例のビデオURLの 'playerapiid'パラメータが機能します。この例では、 'playerapiid'はビデオのobject/embedタグの' id'と同じでなければなりません。 –

関連する問題