如何在onPlayerReady的参数中获取videoid

时间:2015-04-19 19:38:13

标签: youtube-api

我曾经从目标参数中提取视频,如下所示:

function onPlayerReady(event) {

  var videoid  = event.target.d.d.videoId;
  var playerid = event.target.d.d.playerid;

  // more stuff
}

不幸的是,这些似乎经常发生变化。我也用过

event.target.d.id 
在改变之前

我似乎无法找到如何持续获取这些信息。另外, d 代表什么?这是一种不考虑公众使用的调试变量吗?

目前我似乎在

下找到它
event.target.B.videoData.video_id

编辑:根据建议的解决方案,我无法解决自定义属性。

当我用

实例化播放器时
new YT.Player(playerid, {
  videoId: videoid,
  events: {
    'onReady': onPlayerReady,
    'onStateChange': onPlayerStateChange
  },
  playerid : playerid
});

我给它一些我需要的属性,这里是 playerid 属性。由于这不是本机属性,因此它不会出现在getVideoData()中。任何想法如何在对象中存储自定义数据并在以后一致地解决它?不过,我可以用缩小的临时信件来解决这个问题。

2 个答案:

答案 0 :(得分:3)

你是对的,单个字母代表视频对象,但字母是根据最近在图书馆上运行的缩小来分配的。但是,有一种方法可以将对象放入自己的变量中;试试这个:

var videodata = event.target.getVideoData();

然后,您可以通过以下方式获取ID:

videodata.video_id

当涉及到您自己添加的其他属性时,很多都取决于您所包含的自定义数据。如果它只是创建的播放器元素的id,您可以使用event.target.getVideoEmbedCode()返回一个iframe元素,该元素的ID是用于创建对象的playerID。但是其他任意数据都不会通过任何直接API方法公开。你总是可以循环遍历每个对象属性...... for (att in event.target) ...但是如果你需要的对象是多层深度的话,这将需要大量的递归。

如果是我,我不会将自定义数据存储在播放器对象中;我创建了一个包装器对象,它被键入视频ID,允许您添加尽可能多的对象参数:

  var myplayers={};

  function onYouTubeIframeAPIReady() {
    myplayers["M7lc1UVf-VE"] = {"player":new YT.Player('player', {
      height: '390',
      width: '640',
      videoId: 'M7lc1UVf-VE',
      playerVars: {
            'html5':'1',
            'controls': '0'
      },
      events: {
        'onReady': onPlayerReady,
        'onStateChange': onPlayerStateChange
      }
    }),
    "playerid":"player",
    "otherdata":"whatever"
    };
  }

  function onPlayerReady(event) {
    console.log(myplayers[event.target.getVideoData().video_id]);
  }

答案 1 :(得分:0)

如果可以帮助任何人,这就是我最终要解决的问题:

    document.onPlayerReady = function(event) {
        for( var item in event.target) {
            if(event.target[item].id) {
                var iFrameID = event.target[item].id;

                ...
                
                break;
            }
        }
    }