YouTube iFrame API .seekTo () не метод? - PullRequest
8 голосов
/ 22 марта 2012

Я знаю, что .seekTo () работает в API Javascript, но я не могу заставить его работать с iFrame API. Этот метод поддерживается? Код ниже успешно встраивает видео и успешно console.log-s объект проигрывателя. Я получаю сообщение об ошибке «player.seekTo не является функцией» в консоли.

    <script>
        var tag = document.createElement('script');
        tag.src = "http://www.youtube.com/player_api";
        var firstScriptTag = document.getElementsByTagName('script')[0];
        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
        var player;
        function onYouTubePlayerAPIReady() {
            player = new YT.Player('player', {
                height: '390',
                width: '640',
                videoId: 'u1zgFlCw8Aw'
            });
        }
        $(window).load(function(){
            jQuery('#test').click(function(){
                //console.log('test');
                console.log(player);
                player.seekTo(25);
                return false;
            });
        });
    </script>
    <a href="#" id="test">Test</a>

Есть идеи? Спасибо!

Ответы [ 4 ]

6 голосов
/ 17 апреля 2014

Вот обновленный jsfiddle с использованием нового API iframe, который работает

К вашему сведению: если вы просто используете встроенный HTML-код iframe, вы можете поместить ?start=30 для времени начала

<iframe width="640" height="390" 
        src="//www.youtube.com/embed/p2H5YVfZVFw?start=30" 
        frameborder="0" allowfullscreen></iframe>

Для API вы можете запустить видео в определенное время, как это.Используйте параметр start

function onYouTubePlayerAPIReady() {
     player = new YT.Player('player', {
       height: '390',
       width: '640',
       videoId: 'p2H5YVfZVFw',
         playerVars: { 'start': 159, 'autoplay': 1, 'controls': 1 },
       events: {
         'onReady': onPlayerReady,
         'onStateChange': onPlayerStateChange,
       }

     });   

Вы можете позвонить seekTo только после того, как игрок начал играть или он ничего не делает.Проверьте обратный вызов playerStateChange:

onStateChange': onPlayerStateChange

Добавьте эту функцию обратного вызова

function onPlayerStateChange(evt) 
{       
    if (evt.data==1) 
    {
        // this will seek to a certain point when video starts
        // but you're better off using 'start' parameter
        // player.seekTo(22);   
    }
}

У jsFiddle внизу есть кнопки для поиска 30, 60, 90секунд.Он был протестирован со всеми браузерами, которые рифмуются с «Римом».Когда он открывается, он выводит окно предупреждения для типа функции player.seekTo.Если это показывает «неопределенный», у вас есть проблема.

3 голосов
/ 23 марта 2012

Работает как задумано: http://jsfiddle.net/JbwY4/ (FF 11, Chrome 17).

Убедитесь, что выполнены следующие условия:

  1. Контейнер с идентификаторомplayer определено: <div id="player"></div>.
  2. Код не отложен .То есть не в событии onload, $(document).ready, setTimeout и т. Д. В противном случае API IFrame не загружается и код не будет работать.
  3. Загружается jQuery.
1 голос
/ 23 марта 2012

Метод seekTo() доступен только после события onReady.

Вот пример, который начинает играть в 100 секунд:

http://jsfiddle.net/9RQK3/

0 голосов
/ 22 марта 2012

Я полагаю, что не все методы javascript были реализованы на iframe api как на экспериментальном, так что я думаю, что нет, если вы попробовали это, и это не удалось. Однако я не использовал интерфейс API iframe в деталях.

...