onPlayerReady () не запускается, игрок инициализируется только частично - PullRequest
0 голосов
/ 31 декабря 2018

При использовании YouTube iframe API никогда не вызывается onPlayerReady, а проигрыватели загружаются только частично.

Я пробовал некоторые вещи из других сообщений:

Здесь было предложено два решения:

  • Установка переменной origin в соответствии с доменом сервера: я пытался установить ее как в атрибуте iframe src в теге HTML, так и вplayerVars при инициализации проигрывателя.Похоже, никаких изменений не произошло.

  • Замена <iframe> для <div> тегов: это работало в других проектах, но не здесь.Вместо этого я получаю сообщение об ошибке, которого у меня никогда не было, когда javascript пытается создать плеер:

    Uncaught TypeError: tubeId.indexOf is not a function
    at returnFn (mytube.js:3115)
    at Xg.c [as R] (www-embed-player.js:519)
    at gh (www-embed-player.js:513)
    at dh (www-embed-player.js:512)
    at Xg.a.w (www-embed-player.js:509)
    at $g (www-embed-player.js:510)
    at Xg.h.da (www-embed-player.js:505)
    at www-embed-player.js:533
    

На сайте есть два игрока, и хотя я заменил теги только в одном из нихОба игрока начали выдавать эту ошибку.Кроме того, переменные проигрывателя теперь возвращают undefined.

В этом посте говорится, что решение устанавливает enablejsapi на 1, но я уже сделал это в теге HTML iframe.

Эти ошибки встречаются не на всех компьютерах.Все они были обнаружены на компьютере с Windows 8 под управлением Google Chrome (не удалось протестировать в других браузерах).То же самое произошло в Google Chrome на MacOS (хотя я не смог протестировать последние изменения, которые вызвали ошибку mytube.js).На моем компьютере (Windows 7, протестировал сайт на Chrome и Firefox) все работает в основном хорошо, за исключением случайной ошибки «Не удалось выполнить postMessage» на «DOMWindow» (он говорит, что источник проигрывателя установлен на http://www.youtube.com, хотя я его уже заменил).Эта ошибка появляется не всегда, но, возможно, в 30% случаев.

Вот как я создаю игроков:

HTML:

<iframe id="video1" type="text/html" src="https://www.youtube.com/embed/?rel=0&enablejsapi=1&origin=https://mywebsite.com"></iframe>
<!-- Video ID is loaded on user interaction, using loadVideoById() -->

JS /jQuery:

$(document).ready(function() {
    loadYouTubeAPI();
});


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

function onYouTubeIframeAPIReady() {
    player = new YT.Player('video1', {
        playerVars: {'origin':'https://mywebsite.com/'},
        events: {
            'onReady': onPlayerReady1
        },
    });
}

function onPlayerReady1(event) {    //I have different players that do different things when ready; I need different names for each onPlayerReady function
    (...)
}

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

Ответы [ 3 ]

0 голосов
/ 31 декабря 2018

удаляет origin:https://mywebsite.com/ из URL и блок playerVars: {'origin':'https://mywebsite.com/'} во время разработки.При работе помните следующее:

Из справочника API плеера YouTube для iframe Embeds

В качестве дополнительной меры безопасности следует также указать источникпараметр URL-адреса, указав схему URL-адреса (http: // или https://) и полный домен страницы вашего хоста в качестве значения параметра. Хотя origin является необязательным, в том числе защищает от вредоносного стороннего JavaScript-кода, внедряемого в вашу страницу ипохищение контроля над вашим плеером YouTube.

0 голосов
/ 04 января 2019

Обновление: я обнаружил, что ошибка, связанная с mytube.js и www-embed-player.js, связана с кодом, введенным расширением Chrome (SmartVideo для YouTube);Я все еще должен выяснить, почему, но каким-то образом это расширение препятствует правильной загрузке игроков.Отключение и замена тегов iframe на теги div, похоже, решили проблему.

0 голосов
/ 31 декабря 2018

Попробуйте установить 'enablejsapi = "1" "как в URL, так и в качестве атрибута iframe следующим образом:

<iframe id="video1" type="text/html" src="https://www.youtube.com/embed/?rel=0&enablejsapi=1&origin=https://mywebsite.com" enablejsapi="1"></iframe>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...