17

我实际上只是从 YouTube 开发人员页面YouTube Player API Reference for iframe Embeds 中复制并粘贴了代码(从标题“入门”下方)。唯一的区别是,我添加了一个在状态改变时触发的警报,因为我认为我在 onPlayerStateChange 函数中做错了。

您可以在http://jsfiddle.net/jesMv/看到 jsFiddle 。

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

alert('State Changed')

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

然而,什么都没有发生......无论我如何看待这个以及我改变了什么,我根本无法让 onStateChange 做任何事情。

我该如何解决这个问题?

4

2 回答 2

25

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 年修复原始错误后,人们仍然会看到这个错误。

于 2013-06-13T02:11:23.487 回答
1

onStateChange 在任何版本的 Internet Explorer 或 Edge 中都不起作用。我认为一旦微软将 Edge 转移到基于 Chromium 的平台上,它就会开始工作。但无论是 IE9、11 还是 Edge,我都无法触发此事件,即使它在 Chrome 中干净地触发,代码相同。

于 2019-08-08T15:06:17.553 回答