Javascript Youtube-YT对象没有方法PauseVideo()

Javascript Youtube-YT对象没有方法PauseVideo(),javascript,youtube-api,Javascript,Youtube Api,我已经将iFrame Youtube视频嵌入到我的页面中,我希望当用户单击“下一步”按钮以循环播放视频时,视频会暂停。在循环到下一个视频之前,我为活动视频创建了一个YT对象,并尝试运行pauseVideo()函数。控制台报告错误:uncaughttypeerror:Object#没有方法“pauseVideo” 令人费解的是,在调用pauseVideo()函数之前,我有console.log播放器,我确实看到了对象中可用的pauseVideo()方法。有人知道为什么我能够在YT对象中看到该方法,

我已经将iFrame Youtube视频嵌入到我的页面中,我希望当用户单击“下一步”按钮以循环播放视频时,视频会暂停。在循环到下一个视频之前,我为活动视频创建了一个YT对象,并尝试运行
pauseVideo()
函数。控制台报告错误:
uncaughttypeerror:Object#没有方法“pauseVideo”

令人费解的是,在调用
pauseVideo()
函数之前,我有
console.log
播放器,我确实看到了对象中可用的
pauseVideo()
方法。有人知道为什么我能够在YT对象中看到该方法,但控制台一直报告该方法不存在吗

JS小提琴:

//在DOM加载时异步加载IFrame播放器API代码
var tag=document.createElement('script');
tag.src=”https://www.youtube.com/player_api";
var firstScriptTag=document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(标记,firstScriptTag);
//当用户单击“下一张幻灯片”时触发
pauseActiveYoutubeVideos:function(){
var player=new YT.player($('#media.item.active iframe.ytplayer')[0]);
console.log(player);//pauseVideo()在此player对象中定义
player.pauseVideo();//控制台报告“未捕获类型错误:对象”没有方法“pauseVideo”
}

这里有很多小事情会增加你的问题。首先,必须将ID作为参数而不是jquery对象发送(如其中一条注释中所指出的)。更重要的是,YT iframe API在将iframe绑定到播放器对象然后将其删除时遇到问题。。。你不能再绑定到同一个iFrame。因此,需要替换嵌套循环。一种通常有效的策略是设置一个单独的跟踪对象,在开始时为每个视频创建一个YT.Player对象,然后只跟踪哪一个应该是活动的(以便知道暂停哪一个)。尝试类似的方法(它应该位于
标记中,而不是jQuery“ready”函数中,以避免iframeapi的异步加载出现问题):


创建播放器对象时,请确保在调用“pauseVideo”方法之前发生了“onReady”事件

例如,可以通过以下方式停止视频:

        var player = new window.YT.Player(yourIframeElement, {
            events: {
                'onReady': function(event) {
                    event.target.pauseVideo();
                }
            }
        });

注意:如果再次尝试使用相同的视频元素创建对象,“onReady”事件将不再发生。

如果按如下方式强制创建对象,会发生什么:YT.Player(Player).pauseVideo()@这段视频仍然没有暂停。控制台报告了一个奇怪的错误:
uncaughttypeerror:无法调用未定义的方法“toLowerCase”
尝试仅将dom元素的ID发送到YT.Player构造函数:
“media.item.active iframe.ytplayer”
,而不是jQuery对象。@RomainBraun我仍然得到与以前相同的错误,并且视频没有暂停:
uncaughttypeerror:无法调用undefined的方法“toLowerCase”
。请删除我告诉您要做的第一件事
// Load the IFrame Player API code asynchronously on DOM load
var tag = document.createElement('script');
tag.src = "http://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

// Sets up player tracker, and init the carousel
  var players={}, activePlayerId;
  function onYouTubeIframeAPIReady() {
        $('iframe.ytplayer').each(function() {
                players[$(this).attr('id')]=new YT.Player($(this).attr('id'));
        });
        activePlayerId=$('iframe.ytplayer').first().attr('id');
        $("#"+activePlayerId).addClass('active');

 // Click on carousel next button
        $('#next').on('click', function() {
                players[activePlayerId].pauseVideo();
                $("#"+activePlayerId).removeClass('active');
                if ($("#"+activePlayerId).next().is('iframe')) {
                        activePlayerId=$("#"+activePlayerId).next().attr('id');
                }
                else {
                        activePlayerId=$('iframe.ytplayer').first().attr('id');
                }
                $("#"+activePlayerId).addClass('active');
        });
   }
        var player = new window.YT.Player(yourIframeElement, {
            events: {
                'onReady': function(event) {
                    event.target.pauseVideo();
                }
            }
        });