YouTube player iframe API: playVideo не работает в Firefox 9.0.1

у меня есть код встраивания YouTube (я буду вставлять только код, который вызывает проблемы для меня и вырезать вещи, которые не являются публичными):

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

4 ответов


у меня была очень похожая проблема, и я боролся с ответом. Мои звонки в playVideo (), похоже, не работали.

оригинал:

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

проблема заключалась в том, что игрок еще не был доступен - если я просто дал ему немного времени, чтобы появиться, то вызов работал

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

Не знаю, если это ваша точная проблема, но я надеюсь, что это поможет кому-то


более надежный способ сделать это-проверить, готов ли игрок. Если игрок не готов, очередь игрока.playVideo () и выполните его, когда он будет готов, используя событие onReady. суть

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();
                                             });
} 

я наткнулся на этот пост ища что-то похожее. Я нашел ответ здесь, по relic180:

YouTube API-Firefox / IE возвращает ошибку "X не является функцией"для любого игрока.- просьба!--7-->

В принципе, Chrome может инициализировать YouTube, даже если divs скрыты (т. е. display:none), но FF и IE не могут. Мое решение было вариантом relic180:

перенести игрока left:200% или что угодно, когда я хочу, чтобы он был невидимым, но получал инициализировано (и доступно для других вызовов player), а затем переместить его обратно на экран, когда мне это нужно.


Я лично нашел на предустановленных IFrames, что API не будет работать должным образом, если вы не будете использовать https://www.youtube.com как домен. Поэтому будьте осторожны, чтобы не пропустить "www". В противном случае API создаст объект player, но не сможет выполнить методы.