iFrame Player 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 Code Issue Thread 中提到的那样,您设置了一个间隔并轮询播放器的当前状态,而不是监听 onStateChange 事件。这是执行此操作的示例代码片段:
setInterval( function() {
var state = player.getPlayerState();
if ( playerState !== state ) {
onPlayerStateChange( {
data: state
});
}
}, 10);
Firefox 和 IE 问题
其他人提到,如果将 YouTube 播放器放在具有 css 属性的容器中,Firefox 将不会实例化它display: none
。Internet Explorer 也不能与visibility: hidden
. 如果您发现这是问题所在,请尝试使用类似left: -150%
.
Steve Meisner 在这里谈到了这个:YouTube API does not seem to load in Firefox, IFrame gets loaded , but the onPlayerReady event never fires?
还有另一个相关的 SO 问题:YouTube iframe API - onReady 和 onStateChanged 事件未在 IE9 中触发
编辑:我已经将这个答案编辑得更彻底,因为在 2013 年修复原始错误后,人们仍然会看到这个错误。