YouTube iframe播放器API – OnStateChange未触发

我从字面上只是从YouTube开发者页面的YouTube播放器API参考iframeembedded (从“入门”标题下)复制和粘贴代码。 唯一的区别是,当状态改变时,我添加了一个警告,因为我认为我在onPlayerStateChange函数中做了一些错误。

你可以在http://jsfiddle.net/jesMv/看到j​​sFiddle。

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

alert('State Changed') 

作为在onPlayerStateChange函数中触发的第一件事。

什么都没有发生,但是…不pipe我怎么看这个和我改变,我根本无法得到onStateChange做任何事情。

我该如何解决这个问题?

iFrame播放器API(2013年6月修复)存在一个临时问题,您可以在这里阅读: https : //code.google.com/p/gdata-issues/issues/detail?id=4706

Jeff Posnick在这里发布了一个临时解决方法: http : //jsfiddle.net/jeffposnick/yhWsG/3/

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

 function onReady() { player.addEventListener('onStateChange', function(e) { console.log('State is:', e.data); }); } 

确保从YT.PLAYER构造函数中删除onStateChange事件(请参阅jsfiddle)。

此外,正如Google代码问题主题中提到的人,您设置一个时间间隔并轮询玩家当前的状态,而不是侦听onStateChange事件。 这里是一个示例代码片段来做到这一点:

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

Firefox和IE问题

其他人提到,如果将Firefox放置在具有css属性display: none的容器中,Firefox将不会实例化YouTube播放器。 Internet Explorer也将无法使用visibility: hidden 。 如果您发现这是问题,请尝试将容器从left: -150%位置left: -150%在页面之外left: -150%

史蒂夫·迈斯纳(Steve Meisner)在这里谈到: YouTube API似乎不会在Firefox中加载,IFrame被加载,但onPlayerReady事件永远不会触发?

和另一个相关的SO问题: YouTube iframe API – onReady和onStateChanged事件不会在IE9中触发

编辑:我已经编辑了这个答案更彻底,因为在2013年修正了原始错误之后,人们仍然看到这个错误。