YouTube播放器iframe API:playVideo不适用于Firefox 9.0.1

时间:2012-02-15 02:38:07

标签: javascript jquery firefox youtube-api

我有一些YouTube嵌入代码(我只会粘贴代码,这会给我带来麻烦并削减不公开的内容):

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

Chrome和FF上的Console.log向我展示了使用正确方法的好对象,并且存在方法playVideo()。它适用于我检查的所有其他浏览器,但它不适用于FF!?更有趣的是,当我使用普通的YouTube播放按钮播放视频时,我可以使用pauseVideo()方法(以及所有其他方法:搜索,控制音量),但我不能使用playVideo()方法... < / p>

我使用新的嵌入视频方式:

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错误,也没有任何线索......希望有人之前有这个问题并得到解决!:)

4 个答案:

答案 0 :(得分:11)

我遇到了一个非常相似的问题,并且正在努力寻找答案。我对playVideo()的调用似乎不起作用。

ORIGINAL:

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

不知道这是否是您的确切问题,但我希望它有助于某人

答案 1 :(得分:9)

更有效的方法是检查播放器是否准备就绪。如果播放器未准备就绪,请将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();
                                             });
} 

答案 2 :(得分:1)

我遇到这篇文章寻找类似的东西。我在这里找到了答案,由relic180:

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

基本上,即使隐藏了div(即display:none),Chrome也可以初始化youtube嵌入,但FF和IE却无法。我的解决方案是relic180的变种:

我将我的播放器移动到left:200%或其他任何我希望它隐身但被初始化(并可用于player的其他调用),然后在需要时将其移回屏幕。

答案 3 :(得分:0)

我个人在预设的IFrame上发现,如果您不使用https://www.youtube.com作为域,API将无法正常工作。所以要小心不要错过“www”。否则,API将创建播放器对象,但无法执行方法。