YouTube JavaScript API,onStateChange 未触发,没有自动播放

YouTube JavaScript API, onStateChange not firing, no autoplay

我有一个培训计划,我试图在 iFrame 中显示 YouTube 视频,自动播放它,并在视频播放完毕后前进到下一页。我可以触发 onYouTubeIframeAPIReady 函数,但 none 的其他事件会触发。其实我只对状态变化感兴趣

    var tag = document.createElement('script');
    tag.src = 'https://www.youtube.com/iframe_api';
    tag.id = 'apiScript';
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

...

    //function onYouTubeIframeAPIReady() {  //tried this too but no change
    window.onYouTubeIframeAPIReady = function() {
        player = new YT.Player('externalComponent', {
        events: {
            'onReady': onPlayerReady,
            'onError': onPlayerError,
            'onStateChange': onPlayerStateChange
            }
        });
        console.log('api ready');
    }

    function onPlayerStateChange(event) {
        console.log('onStateChange');
        console.log(YT.PlayerState);
    }

运行时,您可以在控制台中看到 "api ready",但没有其他任何内容。 iFrame 看起来像:

    <iframe id="externalComponent" src="https://youtube.com/embed/_S_Bg9qfa8o?enablejsapi=1&controls=0&autoplay=1" width="1024" height="576" allow="autoplay" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

什么阻止 onStateChange 工作而不是自动播放?控件不显示。

我无法像我发布的那样让它工作。我不得不更改代码以使用 div 而不是 iframe,在 playerVars 中添加视频 ID 和其他参数。执行此操作后,视频会自动播放,不显示任何控件,并触发状态更改事件。

  function onYouTubeIframeAPIReady() {
    player = new YT.Player('player', {
      playerVars: {
                autoplay: 1,
                controls: 0,
                showinfo: 0,
                autohide: 1
                },
      videoId: '_S_Bg9qfa8o',
      events: {
        'onReady': onPlayerReady,
        'onStateChange': onPlayerStateChange
      }
    });
  }

...

<div id="player"></div>