Мне было интересно, почему YouTube onPlayerStateChange работает неправильно.
В этом случае я не получаю предупреждающее сообщение (или какое-либо другое событие), когда закончилось видео YouTube.
Есть идеи?
<!doctype html>
<html lang="en">
<body>
<iframe src=""></iframe>
<script src="js/jquery.js"></script>
<script src="http://www.youtube.com/iframe_api"></script>
<script>
function onPlayerStateChange(event) {
switch(event.data) {
case YT.PlayerState.ENDED:
alert('VIDEO IS ENDED'); // <<<--- THIS IS NOT WORKING
break;
}
}
jQuery(document).ready(function($) {
var vidId = 'uIv6u7pdR5I';
$('iframe').attr('src', "https://youtube.googleapis.com/v/" + vidId);
new YT.Player('player_'+vidId, {
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
},
playerVars: { autohide: 1, showinfo: 0 }
});
});
</script>
</body>
</html>
Кажется, что это нормально, если вы используете Youtube api, как в инструкциях на странице https://developers.google.com/youtube/iframe_api_reference
То есть, что-то вроде этого:
<!doctype html>
<html lang="en">
<body>
<div id="player"></div>
<script src="http://www.youtube.com/iframe_api"></script>
<script>
function onPlayerStateChange(event) {
switch(event.data) {
case YT.PlayerState.ENDED:
alert('VIDEO IS ENDED'); // <<<--- THIS IS WORKING
break;
}
}
var player;
function onYouTubeIframeAPIReady() {
var vidId = 'uIv6u7pdR5I';
player= new YT.Player('player', {
videoId: vidId,
events: {
// 'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
},
playerVars: { autohide: 1, showinfo: 0 }
});
}
</script>
</body>
</html>
С кодом я получил ошибки, потому что вы не дождались ответа onYouTubeIframeAPIReady и onReady ссылались на функцию, которая не существовала. Кроме того, ваша настройка iframe src на URL-адрес youtube видео, конечно же, вызывала видео, которое показывалось на странице, но это не имело никакого отношения к айпине Youtube, поэтому не было причин, по которым onPlayerStateChange будет запускаться этим игроком.