Почему мое видео на YouTube не сообщает о событиях? - PullRequest
1 голос
/ 19 января 2011

Взгляните на этот код . Он действительно отлично загружает видео, но не запускает onPlayerStateChange при приостановке, загрузке или воспроизведении видео.

Я уже реализовал функцию для печати любого нового статуса видео, но он даже не сообщает о событиях.

Почему не срабатывает onPlayerStateChange?

Код от JSBin:

<body>
    <script src="http://www.google.com/jsapi" type="text/javascript"></script>
    <script type="text/javascript">
        google.load("swfobject", "2.1");
    </script>    


    <script>

        function onYouTubePlayerReady(playerId) {
            var myplayer = document.getElementById("myplayer");
            myplayer.cueVideoById("pGBMFxN_eys",0, "default");
            myplayer.addEventListener("onStateChange", onPlayerStateChange);
        }

        function onPlayerStateChange(newState){
            log(newstate);
        }

        function log(text){
        document.getElementById('logarea').innerHTML+=text+"<br/>";
        console.log(text);
        }

        function setup(){
        var params = { allowScriptAccess: "always",wmode:"transparent" };
        var atts = { id: "myplayer" };
        swfobject.embedSWF("http://www.youtube.com/apiplayer?" +
                      "&enablejsapi=1&playerapiid=mojplayer",
       "greatvideo", "400", "300", "8", null, null, params, atts);   
        }

        google.setOnLoadCallback(setup);
    </script>


<div id="logarea">
</div>

<div id="greatvideo">
</div>    

</body>

1 Ответ

4 голосов
/ 23 января 2011

В вашем коде есть две ошибки, которые мешают этому работать. Как только вы внесете эти изменения, вы увидите следующий вывод над своим видео на YouTube:

 5
 3
 1
 0

Ошибки следующие:

Используйте кавычки вокруг обратного вызова или используйте анонимную функцию:

 // put callback in quotes or anonymous function
 myplayer.addEventListener("onStateChange", "onPlayerStateChange"); 

Убедитесь, что параметр соответствует локальной переменной, переданной функции журнала:

 function onPlayerStateChange(newState){
        log(newState);  // variables are case sensitive
 }

ПРИМЕЧАНИЕ. addEventListener может не работать в браузерах IE. Я использую Ubuntu и не имею IE, но вам может понадобиться использовать определение браузера, чтобы использовать attachEvent в браузерах IE. Это было проверено на Chrome 8.0.

Я также подписался на ключ jsapi. Документация была неясной, так как на одной странице Google говорилось, что для использования Google Loader требуется ключ API, а на самой странице API - нет. Вам может не потребоваться получить ключ, но если у вас все еще есть проблемы после внесения вышеуказанных изменений, я бы посоветовал вам получить ключ, чтобы исключить эту переменную в уравнении.

http://code.google.com/apis/loader/signup.html

Ресурсы:

Добавление слушателей событий YouTube

Демонстрация проигрывателя событий YouTube YouTube

ОБНОВЛЕНИЕ: Это работает в Chrome 8.0, Firefox 3.6 и IE8. Это не работает в IE7. Но вместо того, чтобы тратить энергию на мертвый браузер, сделайте одолжение сообществу и перенаправьте эти небольшие группы пользователей на ссылку обновления, чтобы они могли присоединиться к 2011 году. :) Используемая мной сборка IE7 является частью IECollections и не настоящий IE7.

Если у вас есть подмножество пользователей, которые по какой-либо причине связаны с более старыми версиями IE7, и вы хотите поддержать этих пользователей, см. javascript addEventListener onStateChange, не работающий в IE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...