player.stopVideo, player.playVideo и т. д. не работают вне вызовов функций событий с помощью youtube-api - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь создать кнопку, позволяющую пользователю щелкнуть ее и остановить встроенное видео на YouTube. Однако всякий раз, когда я пытаюсь вызвать сам объект player для использования функции player.playVideo (), я получаю сообщение о том, что функция не определена.

Плеер определяется глобально и устанавливается при загрузке API YouTube (как в учебнике на их веб-сайте). Вызовы функций для playVideo прекрасно работают, когда события запускают их использование, но использование его вне тех просто не работает.

'''javascript
// 2. This code loads the IFrame Player API code asynchronously.
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() {
    isReady=true;
    player = new YT.Player('player', {
        height: '390',
        width: '640',
        videoId: 'M7lc1UVf-VE',
        events: {
            'onReady': onPlayerReady,
            'onStateChange': onPlayerStateChange
        }
    });
}

function onPlayerReady(event) {
    playVideo();
}

var done = false;
function onPlayerStateChange(event) {
    if (event.data == YT.PlayerState.PLAYING && !done) {
        setTimeout(stopVideo, 6000);
        done = true;
    }
}
function stopVideo() {
    player.pauseVideo();
}

function playVideo() {
    player.playVideo();
}

//The function that is run when the button is pressed, only in this case                      
 // stopVideo not work!
function togglePlay() {
    if(isPlaying) {
        stopVideo();
    } else {
        playVideo();
    }
}
'''

Ожидается: воспроизведение видео с YouTube Фактически: ошибка player.playVideo не является функцией

1 Ответ

1 голос
/ 25 июня 2019

Я решил проблему. Что-то странное происходит даже с настройкой кнопок с функциями onclick, которые используют плеер до его полной загрузки. Чтобы решить эту проблему, я переместил все объявления кнопок и функции в функцию onPlayerReady (событие) и использовал event.target.play или event.target.pause, и это сработало отлично. Мой совет - просто содержать любые объявления кнопок, которые используют функции проигрывателя YouTube внутри onPlayerReady.

...