Comment puis-je obtenir la référence d'un lecteur YouTube existant?

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

j'ai quelques questions sur ce qui se passe quand j'intègre une vidéo YouTube en utilisant le code source comme ci-dessus. Le code doit générer un objet YouTube Player qui traite la vidéo comme les utilisateurs aiment. Quand je génère un lecteur Youtube par moi-même en utilisant L'API de lecteur Youtube(au lieu d'utiliser le code embed), je peux appeler des fonctions d'appel sur elle.

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.

ma question Est, Comment puis-je contrôler l'objet player généré par l'intégration code? Pour le dire autrement, à partir de la page http://www.youtube.com/watch?v=M7lc1UVf-VE , comment lire la vidéo en appelant SOMEPlayer.playVideo() ? Lorsque vous accédez à l'url ytplayer l'objet est disponible, mais il ne semble pas contenir les fonctions nécessaires.

cette question pourrait être un double de cette .

22
demandé sur Community 2013-10-26 10:21:40

5 réponses

cela peut être fait comme suit.

un général YouTube code source:

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

A. Ajouter un paramètre enablejsapi et définir true

de l'index.html

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

B. Donnez-lui un id unique

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

C. Charger L'API iFrame et créer un lecteur qui renvoie à l'iFrame

de l'application.js

var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

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");
}
26
répondu Maximus S 2013-11-08 08:13:35
var player = YT.get('id-of-youtube-iframe');
21
répondu user2909143 2016-04-01 22:25:13

Maximus s a donné une réponse parfaitement correcte. L'API officielle YouTube IFrame Player suggère d'initialiser le lecteur par un identifiant unique d'une iframe avec la vidéo comme var yPlayer = new YT.Player('unique-id'); .

pour les futurs lecteurs de cette question à la recherche d'un moyen de générer un lecteur YouTube à partir d'une référence à un élément iframe sans id (comme moi), il est possible de le faire en exécutant var yPlayer = new YT.Player(iframeElement); si vous ajoutez type="text/html" attribut iframe element et paramètre enablejsapi=1 dans l'attribut src :

<iframe type="text/html" height="360" width="640" src="https://www.youtube.com/embed/jNQXAC9IVRw?enablejsapi=1"></iframe>

Plein "extrait de 151980920"

4
répondu Tim Osadchiy 2016-12-21 21:05:01

une excellente façon de le faire sans charger L'API IFrame dans la fenêtre mère est de saisir l'objet à partir de L'IFrame

var ytplayer_window = document.getElementById("playerIFrame").contentWindow;
var player = ytplayer_window.yt.player.getPlayerByElement(ytplayer_window.player);
2
répondu Thnesko 2015-02-05 09:09:43

La meilleure réponse est presque droit. Vous devez placer "enablejsapi=1" sur l'iframe src. Quelque chose comme:

<iframe id="youtube-video" width="560" height="315" 
        src="https://www.youtube.com/embed/M7lc1UVf-VE?enablejsapi=1" frameborder="0" 
        allowfullscreen>
</iframe>
0
répondu faabiopontes 2016-10-17 19:45:44