YouTube iframe播放器API – OnStateChange未触发
我从字面上只是从YouTube开发者页面的YouTube播放器API参考iframeembedded (从“入门”标题下)复制和粘贴代码。 唯一的区别是,当状态改变时,我添加了一个警告,因为我认为我在onPlayerStateChange函数中做了一些错误。
你可以在http://jsfiddle.net/jesMv/看到jsFiddle。
如上所述,这只是从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年修正了原始错误之后,人们仍然看到这个错误。