API YouTube PlayVideo, PauseVideo и StopVideo не работает

0

Я пытаюсь использовать API YouTube для управления набором игроков в слайд-шоу. Я хочу иметь возможность останавливать и воспроизводить видео в зависимости от того, в какой рамке слайд-шоу включено. Поэтому я подталкиваю игроков к массиву на основе идентификатора фрейма. Когда меняется слава, я вызываю стоп на текущем и начинаю новый. Однако даже в самом основном случае я получаю эту ошибку:

Uncaught TypeError: Object #<S> has no method 'playVideo'

вот код для простого теста

<!-- WIDGET YOUTUBE VIDEO -->
<div class="widget_youtube_video" id="wyv_1-5">
    <iframe id="ytplayer_1-5" width="560" height="315" src="//www.youtube.com/embed/CxW8TLtUMfM?autoplay=0&enablejsapi=1&origin=http://mmgi.localhost/" frameborder="0" allowfullscreen></iframe>
    <script type="text/javascript">
        var tag = document.createElement('script');
        tag.src = "//www.youtube.com/iframe_api";
        var firstScriptTag = document.getElementsByTagName('script')[0];
        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
        var yt_players = {};

        function onYouTubeIframeAPIReady() {
            yt_players['1-5'] = new YT.Player('ytplayer_1-5');
            yt_players['1-5'].playVideo();
        }
    </script>
</div><!-- end widget_youtube_video -->

Я уже пробовал удалить тег происхождения из URL-адреса, чтобы проверить, не вызвало ли это проблемы, но это все равно дало мне такую же ошибку. Любая помощь будет принята с благодарностью, поскольку я понятия не имею, куда идти отсюда.

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Я также попытался поместить игрока в объект без объекта, и он также не работал.

Теги:
youtube-api

1 ответ

4
Лучший ответ

Несколько вещей, которые я вижу, могут быть полезными. Прежде всего, удаление параметра origin поможет во время разработки, поскольку оно предотвращает доступ к API в целом, если A) оно не соответствует точно, и B) иногда без причины, когда на localhost.

Однако, как вы заметили, даже при его удалении в вашем случае API не отвечает. Это связано с тем, что для создания объекта YT.player требуется немного времени, поэтому вы пытаетесь вызвать метод playVideo до того, как объект будет полностью инициализирован. Вместо этого вы должны использовать параметр обратного вызова onReady объекта YT.Player, например:

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

    function onYouTubeIframeAPIReady() {
        yt_players['1-5'] = new YT.Player('ytplayer_1-5', {
          events: {'onReady': onPlayerReady} // bind to callback for when object is ready
        });
    }

    function onPlayerReady(event) {
        event.target.playVideo(); // this is kept generic so the same callback can be used with any player object
    }

Здесь скрипка с рабочим кодом: http://jsfiddle.net/jlmcdonald/dEjXL/

  • 1
    Ваш ответ кажется правильным, покупка моей функции onPlayerReady никогда не срабатывает. есть ли у вас идеи, почему это будет происходить?
  • 0
    Несколько возможностей. Прежде всего, убедитесь, что все вложено правильно, и что вы случайно не определяете функцию onPlayerReady в функции onYouTubeIframeAPIReady. Вы также можете опубликовать свой нерабочий код как ответ на комментарий, так как могут быть и другие небольшие проблемы, которые упускаются из виду.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню