onReady没有为嵌入式youtube iframe触发

时间:2017-03-30 21:41:46

标签: javascript iframe youtube youtube-api youtube-javascript-api

我遇到问题让youtube api正常工作。 API本身加载并调用onYouTubeIframeAPIReady()函数,但onReady不起作用。

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

function onYouTubeIframeAPIReady() {
  log('API')
  log(document.getElementById('yt-pilezspnvu'));
  var player = new YT.Player('yt-pilezspnvu', {
    events: {
      'onReady': onPlayerReady,
      'onStateChange': onPlayerStateChange
    }
  });
}

function onPlayerReady(event) {
  log(event);
}
function onPlayerStateChange(event) {
  log(event);
}

上面的代码不包含在任何函数或任何内容中。下图中的错误只是我的adblock内容。我已经尝试按照此帖子https://stackoverflow.com/a/20505337/736967中的指示添加origin=http://example.com,但仍无效。

enter image description here

2 个答案:

答案 0 :(得分:0)

我认为你需要一些缺少的额外位 尝试将此添加到您的代码中。

  ytplayer = new YT.Player('ytplayer', {

      height: '385',
      width: '640',
      videoId: '[your-videoID]',
      playerVars: {'wmode': 'opaque', 'autohide': 1 , 'enablejsapi': 1 , 'origin': 'http://www.yousite.com', 'rel': 0},

        events: {
          'onReady': onPlayerReady,
          'onStateChange': onPlayerStateChange,
        }

playerVars有许多部分,你可以使用或不使用。但是你肯定需要在播放器中加载一些东西。 VideoID或PlayList。否则什么都不会发生。

答案 1 :(得分:0)

我遇到类似的问题,点击了叠加图像,即使所有其他事件都发生了,onReady事件也似乎没有发生;通过每个控制台日志显而易见。

这个问题显然是一场比赛。单击叠加图像应删除图像并开始播放YouTube视频。我在同一页面上也有几个视频。播放视频的click事件应放在onReady事件中,而不是触发play事件的click事件。由于我们的DOM在视频容器中有多个元素,包括叠加图像,字幕等,因此我尽可能地减少了它。

这是我的解决方案:

    var player = new Array;
    window.onYouTubeIframeAPIReady = function() {
        // Loop through the existing video iframes designated with the inital string 'vidframe_' in the id
        jQuery('iframe[id^="vidframe_"]').each(function (i, val) {
            var $this = $(this); // iframe container
            var $vidWrapper = $this.closest('.video-wrapper');
            // Make sure it is a YouTube video. This data attribute is set when the iframe is created by my code
            if( $vidWrapper.data("video-source") == "youtube" )
            {
                // Initialize each YouTube video present
                player[i] = new YT.Player($this.attr('id'), {
                    events: {
                        onReady: function(event) {
                            // Set the click event listener here
                            $vidWrapper.on("click", function() {
                                //  Target the overlay image
                                // 'this' is now the .video-wrapper image element
                                var imgOver = $(this).find('figure');
                                // Remove image overlay
                                if( imgOver )
                                    imgOver.fadeOut();
                                // Target the right player
                                player[i].playVideo();
                            });
                        }
                    }
                });
            }
        });
    };

我希望这可以帮助其他可能正在搜索无错误的onReady事件的人看似不起作用。这篇css-tricks文章真正给了我最好的线索。