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