Youtube JSAPI, примеры не работают - PullRequest
0 голосов
/ 03 апреля 2012

Я пытаюсь захватить объект YT.Функции onYouTubePlayerReady () вызывается, но я не могу ничего сделать с объектом.

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
    google.load("swfobject", "2.2");
</script>
<script type="text/javascript">
    function onYouTubePlayerReady (playerID)
    {
        ytplayer = document.getElementById(playerID);
    }

    function play ()
    {
        if (ytplayer)
        {
            ytplayer.playVideo();
        }
    }
    play();
</script>

ytplayer ссылается на DOM, а не на само видео (при воспроизведении для него выдает Uncaught TypeError:У объекта # нет метода playVideo , но в основном это пример, приведенный Google.

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 06 апреля 2012

Вы звоните play();, как только страница загрузится.

Но для загрузки плеера YouTube требуется некоторое время, и поэтому через некоторое время вызывается функция onYouTubePlayerReady.

Так как, вы определяете ytplayer в onYouTubePlayerReady, вы не можете использовать ytplayer до вызова onYouTubePlayerReady.Кроме того, ytplayer должен быть глобальным, чтобы обе функции могли его использовать.

0 голосов
/ 06 апреля 2012

Я вообще не вижу, где вы инициализируете свой видеоплеер в приведенном выше кодеКод ниже работает нормально в Firefox.Вместо приведенного ниже [YOUR_VIDEO_ID] укажите идентификатор видео, которое вы хотите воспроизвести, и все будет готово.Можно также подтвердить, что приведенный ниже код работает как чемпион в IE и Chrome.

<div id="video" class="overlay">
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
  <div id="ytapiplayer"></div>
  <script type="text/javascript">
    var params = { allowScriptAccess: "always" };
    var atts = { id: 'myytplayer' };
    swfobject.embedSWF("http://www.youtube.com/v/[YOUR_VIDEO_ID]?enablejsapi=1&playerapiid=ytplayer&version=3", "ytapiplayer", "640", "360", "8", null, null, params, atts);

    function onYouTubePlayerReady(playerId) {
      ytplayer = document.getElementById("myytplayer");

      ytplayer.addEventListener('onStateChange','onytplayerStateChange');
    }

    function onytplayerStateChange(newState) {
      alert("Player's new state: "+newState);
    }

    function play() {
      if (ytplayer) {
        ytplayer.playVideo();
      }
    }
  </script>
  <a href="javascript:void(0)" onclick="play()">Play</a>
</div>

Я думаю, что вам не хватает того, что вам нужно ссылаться на "playerId" по тому, что вы передавали встрока атрибутов инициализации объекта (var atts = ...).Небольшое тестирование показывает, что функция onYouTubePlayerReady не передает действительное значение идентификатора, которое можно использовать для поиска в DOM.

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