Javascript YouTube iframe播放器API-OnStateChange未启动

Javascript YouTube iframe播放器API-OnStateChange未启动,javascript,youtube-api,Javascript,Youtube Api,我只是从YouTube开发者页面(标题“Getting Started”)下面复制并粘贴了代码。唯一的区别是,我在状态更改时添加了一个警报,因为我认为我在onPlayerStateChange函数中做错了什么 您可以在中看到JSFIDLE 如前所述,它只是YouTube开发者页面上添加的代码的精确副本 alert('State Changed') 作为onPlayerStateChange函数中触发的第一件事 然而,什么都没有发生。。。无论我如何看待这一点,无论我改变了什么,我都无法让onSt

我只是从YouTube开发者页面(标题“Getting Started”)下面复制并粘贴了代码。唯一的区别是,我在状态更改时添加了一个警报,因为我认为我在onPlayerStateChange函数中做错了什么

您可以在中看到JSFIDLE

如前所述,它只是YouTube开发者页面上添加的代码的精确副本

alert('State Changed')
作为onPlayerStateChange函数中触发的第一件事

然而,什么都没有发生。。。无论我如何看待这一点,无论我改变了什么,我都无法让onStateChange做任何事情


如何解决此问题?

iFrame Player API有一个临时问题(于2013年6月修复),您可以在此处阅读:

Jeff Posnick在这里发布了一个临时解决方案:

作为临时修复,您只需要在onReady事件中添加事件侦听器:

function onReady() {
    player.addEventListener('onStateChange', function(e) {
        console.log('State is:', e.data);
    });
}
确保从YT.PLAYER构造函数中删除onStateChange事件(请参阅JSFIDLE)

另外,正如有人在Google代码发布线程中提到的,您设置了一个时间间隔并轮询播放器的当前状态,而不是侦听onStateChange事件。下面是执行此操作的示例代码段:

setInterval( function() {
  var state = player.getPlayerState();
  if ( playerState !== state ) {
    onPlayerStateChange( {
      data: state
    });
  }
}, 10);
Firefox和IE问题

其他人提到,如果将YouTube播放器放在具有css属性
display:none
的容器中,Firefox将不会实例化该播放器。Internet Explorer也不能使用
可见性:隐藏
。如果您发现这是一个问题,请尝试使用类似于
left:-150%
的内容将容器放置在页面之外

Steve Meisner在这里谈到了这一点:

还有一个相关的问题:


编辑:我对这个答案进行了更全面的编辑,因为在2013年修复了原始错误后,人们仍然看到这个错误。onStateChange在任何版本的Internet Explorer或Edge中都不起作用。我认为,一旦微软将Edge转变为基于Chromium,它将开始工作。但无论是IE9、11还是Edge,我都无法触发此事件,即使它以完全相同的Chrome代码触发。

现在我编写的问题似乎还没有得到解决(PT time 00.44)。如果您使用的是iframe而不是加载api后被替换的div,则可能无法工作在我的情况下,这不是解决方案(这个错误现在应该解决了吗?)。我在视频容器上显示了
display:none
,API没有启动。更多信息:2014年,我看到这个中断,大约30分钟后神秘地重新开始工作。此答案中给出的修复在中断时对我无效。谢谢!我需要轮询解决方案来实现此功能…轮询的两个更新函数(为完整起见):-添加
var playerState
作为第一行,以初始化变量-添加行
playerState=state
,以在事件触发后跟踪新状态。