Поэтому я решил обновить это с помощью рабочего примера. Я отказался от указания тега iframe и просто использовал API-интерфейс iframe для создания iframe, а затем загрузил проигрыватель по идентификатору с атрибутом данных. Вот рабочий пример ниже. Итак, теперь все изменения состояния последовательно передаются через проигрыватель YouTube. Таким образом, скрипт загрузит iframe в Div #player, и вы можете просто загрузить VideoByID с помощью jquery и javascript.
<div id="player"></div>
<script>
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('player', {
playerVars: { 'autoplay': 0,},
videoId: 'M7lc1UVf-VE',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
function onPlayerReady(event) {
alert('started');
}
function onPlayerStateChange(event) {
if(event.data === 0) {
alert('done');
}
}
$( document ).on( "click", ".video-link", function(e) {
e.preventDefault();
var videoID = $(this).attr('data-videoID');
player.loadVideoById(videoID);
});
</script>
А затем используйте ссылку с таким атрибутом данных.
<a href="#" class="video-link" data-videoID="youtube id here">Link</a>
player.loadVideoById('NewVideoID')
Все события для проигрывателя должны работать нормально. Если вы хотите записать в консоль новый идентификатор видео, чтобы увидеть изменения в консоли отладки/отчетности, попробуйте этоconsole.log(player.getVideoUrl().split('?v=')[1]);
- person NewToJS   schedule 14.08.2015