Javascript 如何获取对现有YouTube播放器的引用?
Javascript 如何获取对现有YouTube播放器的引用?,javascript,iframe,youtube,youtube-api,Javascript,Iframe,Youtube,Youtube Api,我有几个问题,当我使用上面的源代码嵌入YouTube视频时会发生什么。代码应该生成一个YouTube播放器对象,以用户喜欢的方式处理视频。当我自己使用Youtube播放器API(而不是使用嵌入代码)生成一个Youtube播放器时,我可以对其调用函数 var player; function onYouTubeIframeAPIReady() { player = new YT.Player('player', { height: '390', width: '640',
我有几个问题,当我使用上面的源代码嵌入YouTube视频时会发生什么。代码应该生成一个YouTube播放器对象,以用户喜欢的方式处理视频。当我自己使用Youtube播放器API(而不是使用嵌入代码)生成一个Youtube播放器时,我可以对其调用函数
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '390',
width: '640',
videoId: 'M7lc1UVf-VE',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
//player.playVideo(); will play the video.
我的问题是,如何控制嵌入代码生成的播放器对象?换句话说,在第页,我如何通过调用SOMEPlayer.playVideo()
来播放视频?当您转到url时,ytplayer
对象可用,但它似乎不包含必要的函数
这个问题可能是重复的 这可以像下面这样做 给定一个通用的YouTube嵌入源代码:
<iframe width="560" height="315" src="//www.youtube.com/embed/M7lc1UVf-VE" frameborder="0" allowfullscreen></iframe>
b。给它一个唯一的id
<iframe id="youtube-video" width="560" height="315" src="//www.youtube.com/embed/M7lc1UVf-VE?enablejsapi=1" frameborder="0" allowfullscreen></iframe>
不在父窗口中加载iframeapi的一个好方法是从IFrame抓取对象
var ytplayer_window = document.getElementById("playerIFrame").contentWindow;
var player = ytplayer_window.yt.player.getPlayerByElement(ytplayer_window.player);
最好的答案几乎是正确的。 您必须在iframe src上放置“enablejsapi=1”。 比如:
<iframe id="youtube-video" width="560" height="315"
src="https://www.youtube.com/embed/M7lc1UVf-VE?enablejsapi=1" frameborder="0"
allowfullscreen>
</iframe>
马克西姆斯给出了一个完全正确的答案。官方文件建议通过iframe的唯一id初始化播放器,视频为
var yPlayer=new YT.player('unique-id')代码>
对于这个问题的未来读者来说,寻找一种从对没有id的iframe元素的引用生成YouTube播放器的方法(就像我自己一样),可以通过运行var yPlayer=new YT.Player(iframelement)
如果向iframe元素添加type=“text/html”
属性,并在src
属性中设置enablejsapi=1
参数:
Floradu88它实际上在onPlayerStateChange()
和onPlayerReady()
中没有任何作用;我做错什么了吗?@spideep这应该可以:您必须通过?enablejsapi=1
,并且必须使用https://
。似乎两个URL都必须httpS@Ads我认为两个协议需要匹配。所以无论是http
还是https
这对我都不起作用。我收到一个错误(索引):1未捕获(承诺中)DomeException:play()请求被对pause()的调用中断。Promise(异步)(匿名)@scripts.js:20 dispatch@jquery-1.12.4.js:5226 elemData.handle@jquery-1.12.4.js:4878 scroll(异步)d.getScrollTop@skrollr.min.js:2 Aa@skrollr.min.js:2 d.refresh@skrollr.min.js:2 d@skrollr.min.js:2(匿名)@(索引):493 cast_sender.js:67未捕获的DomeException:无法构造“PresentationRequest”:演示不安全的文档[cast:233637DE?这不起作用。什么是ytplayer\u窗口。player
?请解释您的答案如何解决问题,它将帮助每个人更清楚地理解您的解决方案,以供将来参考。Lifesaver,谢谢。@Aziz,这是如何使用YouTube API根据其元素id获取对播放器的引用的方法。在哪里是关于此变更/最佳实践的文件。请澄清最佳实践。谢谢
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('youtube-video', {
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
function onPlayerReady() {
console.log("hey Im ready");
//do whatever you want here. Like, player.playVideo();
}
function onPlayerStateChange() {
console.log("my state changed");
}
var ytplayer_window = document.getElementById("playerIFrame").contentWindow;
var player = ytplayer_window.yt.player.getPlayerByElement(ytplayer_window.player);
var player = YT.get('id-of-youtube-iframe');
<iframe id="youtube-video" width="560" height="315"
src="https://www.youtube.com/embed/M7lc1UVf-VE?enablejsapi=1" frameborder="0"
allowfullscreen>
</iframe>