【问题标题】:How do I get the reference to an existing YouTube player?如何获取对现有 YouTube 播放器的引用?
【发布时间】:2013-11-05 09:14:20
【问题描述】:

<iframe width="560" height="315" src="//www.youtube.com/embed/M7lc1UVf-VE" frameborder="0" allowfullscreen></iframe>

关于使用上述源代码嵌入 YouTube 视频时会发生什么,我有几个问题。该代码应生成一个 YouTube Player 对象,该对象以用户喜欢的方式处理视频。当我使用 Youtube Player API(而不是使用嵌入代码)自己生成一个 Youtube Player 时,我可以在其上调用调用函数。

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.

我的问题是,如何控制嵌入代码生成的播放器对象?换句话说,从页面http://www.youtube.com/watch?v=M7lc1UVf-VE,我如何通过调用SOMEPlayer.playVideo()来播放视频?当你转到 url 时,ytplayer 对象是可用的,但它似乎没有包含必要的功能。

此问题可能与this 重复。

【问题讨论】:

    标签: javascript iframe youtube youtube-api


    【解决方案1】:

    这可以像下面这样完成。

    给定一个通用的 YouTube 嵌入源代码:

    <iframe width="560" height="315" src="//www.youtube.com/embed/M7lc1UVf-VE" frameborder="0" allowfullscreen></iframe>
    

    一个。添加enablejsapi查询参数并在src URL中设置为1

    <iframe width="560" height="315" src="//www.youtube.com/embed/M7lc1UVf-VE?enablejsapi=1" 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>
    

    c。加载 YouTube iFrame API

    <script src="https://www.youtube.com/iframe_api"></script>
    

    d。创建一个引用现有 iFrame 的播放器

    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");
    }
    

    【讨论】:

    • Floradu88 jsfiddle.net/bf7zQ/1 实际上在 onPlayerStateChange()onPlayerReady() 中什么都不做;我做错了吗?
    • @spideep 这应该可以工作:jsfiddle.net/bf7zQ/2 你必须通过?enablejsapi=1,你必须使用https://
    • 看来两个url都必须是httpS
    • @Ads 我认为两种协议都需要匹配。所以要么http要么https
    • 这对我不起作用。我收到一个错误(索引):1 未捕获(承诺中)DOMException:play() 请求被对 pause() 的调用中断。 Promise (async) (匿名) @scripts.js:20 dispatch @jquery-1.12.4.js:5226 elemData.handle @jquery-1.12.4.js:4878 scroll (async) d.getScrollTop @skrollr.min.js :2 Aa @ skrollr.min.js:2 d.refresh @ skrollr.min.js:2 d @ skrollr.min.js:2 init @ skrollr.min.js:2 (匿名) @ (index):493 cast_sender .js:67 未捕获的 DOMException:无法构造“PresentationRequest”:呈现不安全的文档 [cast:233637DE?
    【解决方案2】:

    Maximus S 给出了完全正确的答案。官方 YouTube IFrame Player API 文档建议通过 iframe 的唯一 ID 初始化播放器,视频为 var yPlayer = new YT.Player('unique-id');

    对于这个问题的未来读者正在寻找一种方法来从对没有 id 的 iframe 元素的引用生成 YouTube 播放器(就像我自己一样),如果您添加 type="text/html",则可以通过运行 var yPlayer = new YT.Player(iframeElement); 来做到这一点属性到 iframe 元素并在src 属性中设置enablejsapi=1 参数:

    &lt;iframe type="text/html" height="360" width="640" src="https://www.youtube.com/embed/jNQXAC9IVRw?enablejsapi=1"&gt;&lt;/iframe&gt;

    Full snippet

    【讨论】:

      【解决方案3】:

      最好的答案几乎是正确的。 您必须在 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>
      

      【讨论】:

      • 关于此变体/最佳实践的文档在哪里。如果能澄清一下最佳实践,那就太好了。谢谢
      【解决方案4】:
      var player = YT.get('id-of-youtube-iframe');
      

      【讨论】:

      • 请说明您的答案是如何解决问题的,它将帮助大家更清楚地理解您的解决方案,以供将来参考。
      • 救命稻草,谢谢。 @Aziz,这是您可以使用 YouTube API 根据其元素 ID 获取对播放器的引用的方法。
      【解决方案5】:

      在父窗口中不加载 IFrame API 的一个好方法是从 IFrame 中获取对象

      var ytplayer_window = document.getElementById("playerIFrame").contentWindow;
      var player = ytplayer_window.yt.player.getPlayerByElement(ytplayer_window.player);
      

      【讨论】:

      • 这不起作用。 ytplayer_window.player 是什么?
      猜你喜欢
      • 2013-06-09
      • 2015-02-16
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 2013-04-30
      • 2011-03-23
      相关资源
      最近更新 更多