Youtube api 如何在onPlayerReady';s论点

Youtube api 如何在onPlayerReady';s论点,youtube-api,Youtube Api,我曾经从目标参数中提取videoid,如下所示: function onPlayerReady(event) { var videoid = event.target.d.d.videoId; var playerid = event.target.d.d.playerid; // more stuff } 不幸的是,这些变化似乎相当频繁。我也用过 event.target.d.id 在它被改变之前 我似乎找不到如何始终如一地获得这些信息。还有,d代表什么?这是一种不考虑

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

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()中。你知道如何在对象中存储自定义数据并在以后一致地对其进行寻址吗?不过,我可以使用缩微中的临时字母来处理此属性。

您是对的,单个字母表示视频对象,但字母是根据最近在库中运行的缩微来分配的。但是,您可以执行一种方法,将对象放入您自己的变量中;试试这个:

var videodata = event.target.getVideoData();
然后,您可以通过以下方式获取ID:

videodata.video_id
当涉及到您自己添加的其他属性时,很大程度上取决于您所包含的自定义数据。如果它只是所创建播放器的元素id,则可以使用
event.target.getVideoEmbedCode()
返回一个iframe元素,该元素的id为用于创建对象的playerID。但其他任意数据不会通过任何直接API方法公开。您可以始终循环遍历每个对象属性<代码>用于(事件中的att.target)。。。但是如果你需要的对象有好几层,那就需要大量的递归

如果是我,我不会将自定义数据存储在player对象中;我将创建一个包装器对象,它被设置为视频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]);
  }

如果这对任何人都有帮助的话,这就是我最终的结果:

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

                ...
                
                break;
            }
        }
    }

也许可以尝试
console.log(event)
并浏览它,看看您需要的信息在哪里这就是我所做的。但是路径正在改变。也谢谢你对缩小的解释。这就解释了为什么它们不可靠。我还没有测试你的解决方案,但应该可以。这并没有完全解决我的问题。请看我的编辑。我非常感谢您的进一步帮助。请编辑上面的答案以解决自定义数据ATT。我认为这是最好的解决方案。谢谢你的回答!