Подтвердить что ты не робот

Как получить ссылку на существующего проигрывателя YouTube?

<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, но он не содержит необходимых функций.

Этот вопрос может быть дубликатом этого.

4b9b3361

Ответ 1

Это можно сделать следующим образом.

Учитывая общий исходный код встраивания YouTube:

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

а. Добавьте параметр enablejsapi и установите его true

index.html

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

б. Дайте ему уникальный идентификатор

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

с. Загрузите API iFrame и создайте плеер, который ссылается на существующий iFrame

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

Ответ 2

var player = YT.get('id-of-youtube-iframe');

Ответ 3

Maximus S дал совершенно правильный ответ. Официальный API YouTube IFrame Player docs предлагают инициализировать плеер с помощью уникального идентификатора iframe с видео как var yPlayer = new YT.Player('unique-id');.

Для будущих читателей этого вопроса, ищущих способ создания YouTube Player из ссылки на элемент iframe без id (как я), это можно сделать, запустив var yPlayer = new YT.Player(iframeElement);, если вы добавите type="text/html" атрибут к элементу iframe и установить параметр enablejsapi=1 в атрибуте src:

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

Полный фрагмент

Ответ 4

Отличный способ сделать это без загрузки IFrame API в родительском окне - это захватить объект из IFrame

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

Ответ 5

Лучший ответ почти прав. Вы должны поместить "enablejsapi = 1" в iframe src. Что-то вроде:

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