Uncaught TypeError: YT.Player не является конструктором - PullRequest
0 голосов
/ 28 августа 2018

Я надеюсь, что кто-то может помочь с этим. Я получаю следующую ошибку Uncaught TypeError: YT.Player не является конструктором, когда я нахожусь на одной вкладке из примерно 5 на моей странице. Я нажимаю на кнопку на странице, и она вызывает модальное окно, из которого я делаю выбор, и при закрытии модального окна в консоли отображается ошибка.

Что расстраивает, так это то, что, используя те же данные с теми же аргументами компиляции, что и производство, я не могу заставить эту ошибку реплицироваться в наших средах разработки или промежуточной обработки. Единственное отличие состоит в том, что наши производственные серверы работают за NetScaler. Может ли быть проблема NetScaler?

Ниже мой видео код.

<div class="videocontainer">
        @if (!string.IsNullOrEmpty(video.VideoURL))
        {

            <script type="text/javascript">
                var _gVideoTracked = false;
                var player;
                function onYouTubeIframeAPIReady() {
                    player = new YT.Player('player', {
                        events: { 'onStateChange': onPlayerStateChange }
                    });
                }
                function onPlayerStateChange(event) {
                    switch (event.data) {
                        case 0:
                            break;
                        case 1:
                            if (!_gVideoTracked) {
                                BaGaTrack('Video Played', 'Played')
                            }
                            _gVideoTracked = true;
                            break;
                        case 2:

                    }
                }
                $(document).ready(function () {
                    $.getScript("https://www.youtube.com/iframe_api", function () {
                        player = new YT.Player('player', {
                            events: { 'onStateChange': onPlayerStateChange }
                        });
                    });
                });
            </script>
            <iframe id="player" src="@video.VideoURL/?enablejsapi=1" allowfullscreen class="video"></iframe>
        }

    </div>

1 Ответ

0 голосов
/ 24 февраля 2019

Оказывается, что синхронизация API не имеет значения (с использованием URL https://www.youtube.com/iframe_api), поскольку возвращаемый код в любом случае загружает API асинхронно. Инструкции вводят в заблуждение (цифры), создавая впечатление, что загрузка с использованием прямой ссылки на скрипт будет синхронной, но это не так. Таким образом, new YT.Player терпит неудачу просто потому, что тип игрока равен undefined.

И это событие, которое вам нужно ждать:

Любая веб-страница, использующая API IFrame, также должна реализовывать следующая функция JavaScript:

onYouTubeIframeAPIReady - API вызовет эту функцию, когда страница завершила загрузку JavaScript для API проигрывателя, который позволяет вам использовать API на вашей странице. Таким образом, эта функция может создать объекты проигрывателя, которые вы хотите отобразить, когда страница грузы.

Предупреждение: некоторые специфичные для игрока функции также отсутствуют до тех пор, пока сам игрок не завершит загрузку (запускает событие «готово»).

...