2012-02-15 18 views
6

私はいくつかのYouTube埋め込みコードを持っています(私には問題を引き起こしているコードだけを貼り付け、公開していないものは切り捨てます):YouTubeプレーヤーのiframe API:Firefox 9.0.1でplayVideoが動作しない

console.log(ytplayer); 
ytplayer.playVideo(); 

CONSOLE.LOGクロム上及びFFには、正しい方法で私の良好なオブジェクトを示し、メソッドplayVideo()が存在します。私がチェックした他のブラウザでも動作しますが、FFでは動作しません!もっと面白いのは、通常のYouTubeの再生ボタンを使用してビデオを再生すると、pauseVideo()メソッド(および他のすべてのもの:音量の制御)を使用できますが、playVideo()メソッドは使用できません...

私はビデオを埋め込むための新しい方法を使用します。「私は準備ができています」もちろん

ytplayer = new YT.Player(player, { 
     height: height, 
     width: width, 
     videoId: videoid, 
     allowfullscreen: 'true', 
     playerVars: { 
      controls: 0, 
      showinfo: 0, 
      wmode: 'opaque', 
      autoplay: (autoplay ? 1 : 0) 
     }, 
     events: { 
      'onReady': function() { 
       console.log('I am ready'); 
      } 
     } 
    }); 

は、コンソール出力です。私は私が間違って何をすべきか見当がつかないとだけFFが機能しない理由...何の手掛かりがそこにはJSエラーがなく、...ホープ誰かが前にこの問題を持っていたし、それが解決してしまった!:)

+0

「JSエラーはありません。問題のページへのリンクだけが、あなたの言葉だけでなく、問題を特定するのに役立つかもしれません。 – Cheery

+1

多分あなたは正しい@Cheeryですが、私が取り組んでいるプロジェクトは商業的なものであり、公開まで非公開でなければならないのでリンクを投稿できません...申し訳ありません! 「JSエラーはなく、手がかりがない」というのは、コンソール出力のすべてがChromeとFFの両方で同じであり、FFでは動作しないということです。また、エラーや警告はありません。 – Karol

+0

「エラーと警告はありません。」また、「理論的思考」ではなく「実験」が必要です。 – Cheery

答えて

9

私が持っていました非常に似た問題であり、答えに苦労していました。 playVideo()への私の呼び出しがうまくいかないようです。

ORIGINAL: - 私はちょうどそれを表示するために少しの時間を与えた場合、呼び出しはドン」

$('#play_movie').click(function(){ 
    $('#video').show(); 
    if(player) 
    { 
     var fn = function(){ player.playVideo(); } 
     setTimeout(fn, 1000); 
    } 

を働いた

$('#play_movie').click(function(){ 
    $('#video').show(); 
    if(player) 
    { 
     if(typeof player.playVideo == 'function') 
     { 
      player.playVideo(); 
     } 
    } 

問題は、プレイヤーがまだ利用できなかったということでしたトンこれはあなたの正確な問題であるかどうかを知るが、私はそれはそれを行うために、より堅牢な方法は、プレイヤーの準備ができているかどうかを確認することです誰か

+0

これは場合によっては解決策になります。 – Karol

+3

'onYouTubeIframeAPIReady'ではなく、プレーヤーによってトリガーされる 'onReady'イベントがあります。これを使用すると、より正しいように見えます。 –

+0

'playVideo()'メソッドはChromeで動作していましたが、FFとIEでは失敗しました。 IEは、オブジェクトがメソッドをサポートしていないというエラーを報告しました。タイムアウトを追加すると、それは魅力的だった。ありがとう! – gtr1971

7

に役立ちます願っています。プレーヤが準備できていない場合は、player.playVideo()をキューに入れ、onReadyイベントを使用して準備ができたら実行します。 Gist

var playerConfig = {},     // Define the player config here 
    queue = {       // To queue a function and invoke when player is ready 
     content: null, 
     push: function(fn) { 
     this.content = fn; 
     }, 
     pop: function() { 
     this.content.call(); 
     this.content = null; 
     } 
    }, 
    player; 

window.onYouTubeIframeAPIReady = function() { 
    player = new YT.Player('player', { 
    videoId: 'player', 
    playerVars: playerConfig, 
    events: { 
     onReady: onPlayerReady 
    } 
    }); 
}; 

// API event: when the player is ready, call the function in the queue 
function onPlayerReady() { 
    if (queue.content) queue.pop(); 
} 

// Helper function to check if the player is ready 
function isPlayerReady(player) { 
    return player && typeof player.playVideo === 'function'; 
} 

// Instead of calling player.playVideo() directly, 
// using this function to play the video. 
// If the player is not ready, queue player.playVideo() and invoke it when the player is ready 
function playVideo(player) { 
    isPlayerReady(player) ? player.playVideo() : queue.push(function() { 
               player.playVideo(); 
              }); 
} 
+0

私はこのアプローチも好きです。あなたが言ったように、このように考えたことはありません。 – Karol

+0

回答を受け入れる必要があります!あなたのセマンティクスに不満を抱かなければならない場合は、あなたのキューは実際に待ち行列ではない(プッシュ/ポップと混同している)が、あなたがやっていることは本当に良いことだと思います。 –

1

私は似たものを探してこの記事に出くわしました。私はrelic180によって、ここに私の答えを見つけた:

YouTube API - Firefox/IE return error "X is not a function" for any 'player.' request

基本的に、Chromeはユーチューブで(すなわち、display:none)のdivが隠されている場合でも埋め込みが、FFとIEはできません初期化することができます。

私は、プレーヤーをleft:200%に移動するか、目に見えないものにしたいが初期化(そして他の呼び出しではplayerに利用可能)したいときはいつでも画面に戻すことができます。

0

私は個人的にあなたがドメインとしてhttps://www.youtube.comを使用していないならば、APIが正常に動作しないことを、あらかじめ設定さiFrameをで見つかりました。だから "www"を見逃さないように注意してください。それ以外の場合、APIはプレーヤーオブジェクトを作成しますが、メソッドの実行に失敗します。

関連する問題