2011-01-19 1 views
1

Взгляните на this code. Он действительно загружает видео совершенно, но он не запускает onPlayerStateChange при приостановке, загрузке или воспроизведении видео.Почему мое видео YouTube не сообщает о событиях?

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

Почему не срабатывает 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> 
+0

ли мой ответ решить вашу проблему? – jmort253

+1

Обычно вы должны включить код в свой вопрос, а не ссылку на него. Это значит, что другие люди в будущем могут это увидеть, когда сайт, на котором он размещен, больше не может существовать. Это также помогает при чтении решения, поскольку вы можете легко сравнивать.TL; DR: отредактируйте свой вопрос, чтобы включить всю информацию, включая фрагменты кода. –

ответ

4

Есть две ошибки в коде, которые мешают это работать. После того, как вы сделаете эти изменения, вы увидите следующий вывод выше видео 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 Adding Event Listeners

YouTube EventListener Player Demo

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

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

+0

Вы - ЧЕЛОВЕК, thx много, в chrome, необходимо, чтобы параметр OnPlayerStateChange был «newState», с другим именем не работает. – levi

+0

Нет @levi, поскольку имя параметра было «newState», ему просто нужно было сопоставить переменную, переданную в функцию журнала. Вы можете назвать параметры своей функции, как хотите, просто помните, что они чувствительны к регистру. 'function onPlayerStateChange (текст) {журнал (текст); } 'будет работать так же хорошо. Надеюсь это поможет! :) – jmort253