我曾经从目标参数中提取视频ID,如下所示:
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为用于创建对象的播放器id。但其他任意数据不会通过任何直接的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]);
}
如果它能帮助任何人,这就是我最终要做的:
document.onPlayerReady = function(event) {
for( var item in event.target) {
if(event.target[item].id) {
var iFrameID = event.target[item].id;
...
break;
}
}
}