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>