Ne peut pas contrôler même avec Youtube intégrer document.getElementById ( 'xyz') playVideo () -. Pas une fonction?

StackOverflow https://stackoverflow.com/questions/2217543

Question

OK, je suis coincé et je ne sais pas ce qui est mal, même après avoir suivi les documents de Google et suggestions de lecture ici sur Stackoverflow. Pourquoi ne puis-je contrôler Youtube dans ma page intègre web?

Si je crée un fichier HTML avec le être:

<object id="o1" width="480" height="295">
  <param name="movie" 
    value="http://www.youtube.com/v/qCTLCNmnlKU&hl=en_US&fs=1&enablejsapi=1&">
  </param>
  <param name="allowFullScreen" value="true"></param>
  <param name="allowscriptaccess" value="always"></param>
  <embed id="e1" 
    src="http://www.youtube.com/v/qCTLCNmnlKU&hl=en_US&fs=1&enablejsapi=1&" 
    type="application/x-shockwave-flash" 
    allowscriptaccess="always" allowfullscreen="true" width="480" height="295">
  </embed>
</object>

Même lorsque je tente de faire:

// I get an object. Yay.

document.getElementById('e1');

// This generates "...playVideo is not a function"

document.getElementById('e1').playVideo();

Aide! Qu'est-ce que je fais mal? Merci.

Était-ce utile?

La solution

OK, voici donc la réponse trouvée dans une petite ligne de texte sur la page API: http://code.google.com/apis/youtube/js_api_reference.html

  

« Remarque: Pour tester l'un de ces appels, vous devez avoir votre fichier en cours d'exécution sur un serveur web, comme le lecteur Flash restreint les appels entre les fichiers locaux et Internet. »

Alors, pour me permettre de continuer à se développer sur mon ordinateur portable Mac je l'ai fait ce qui suit:

  1. Edité mon / etc / hosts pour inclure une entrée de retour à mon localhost:

    127.0.0.1   testhost.com
    
  2. Edité mon /etc/apache2/httpd.conf fichier pour ajouter une entrée d'hôte virtuel pointant vers mon répertoire de développement:

    <VirtualHost *:80>
        ServerName testhost.com
        DocumentRoot /Users/amy/flashproj
        <Directory /Users/amy/flashproj>
            AllowOverride all
            Options MultiViews Indexes FollowSymLinks
            Allow from All
        </Directory>
    </VirtualHost>
    
  3. Restarted Apache:

    sudo apachectl restart
    
  4. Visionné à ma propre localhost via mon nouveau serveur virtuel:

    http://testhost.com
    

Voila. Cela fonctionne tout à fait maintenant. Je peux interroger la page pour le joueur:

document.getElementById('e1');                // OK
document.getElementById('e1').playVideo();    // OK!

Ouf! Non onYouTubePlayerReady () nécessaire non plus!

Autres conseils

joueur Youtube n'a pas encore été chargé au moment où vous essayez de l'utiliser. Il y a une fonction de rappel spécial qui sera tiré automatiquement dès qu'il est chargé.

  

Vos pages HTML qui affichent le   joueur doit mettre en œuvre un chromeless   fonction de rappel du nom   onYouTubePlayerReady. L'API   appeler cette fonction lorsque le joueur est   entièrement chargé et l'API est prêt à   recevoir des appels.

YouTube JavaScript Player API Référence .

Par conséquent, vous pouvez réécrire votre code de la manière suivante:

<script type="text/javascript">
function onYouTubePlayerReady(playerId) {
    var ytplayer = document.getElementById('e1');
    ytplayer.playVideo();
}
</script>

Vous pouvez également passer ennuierait playerapiid tout en intégrant le joueur s'il y a beaucoup d'entre eux de faire la distinction dans le gestionnaire de onYouTubePlayerReady.

Qu'est-ce qui se passe si vous utilisez l'id "o1" au lieu de "e1"?

OK bien sur cette page: http://code.google.com/apis /youtube/js_api_reference.html il me semble que la bibliothèque « swfobject » doit être inclus afin que l'API soit disponible. Je vais l'essayer.

[modifier] OK, voici ce que j'ai:

<html>
  <head>
    <script src='http://code.jquery.com/jquery-1.4.1.js'></script>
    <script src='http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js'></script>
    <script>
      window['onYouTubePlayerReady'] = function onYouTubePlayerReady(playerId) {
        player = document.getElementById("zebra");
        player.playVideo();
      };
      $(function() {
         swfobject.embedSWF(
         "http://www.youtube.com/v/qCTLCNmnlKU?hl=en_US&fs=1&enablejsapi=1&playerapiid=ytplayer", 
          "foo",
          "480", "295",
          "8",
          null, null,
          { allowScriptAccess: 'always' },
          { id: 'zebra' }
        );
      });
    </script>
  </head>
  <body>
    <div id='foo'>Foo</div>
  </body>
</html>

Cela fonctionne, mais assez curieusement il ne fonctionne que quand je sers d'un vrai serveur web. Si je mets que dans un fichier local et le charger dans le navigateur, il ne fonctionne pas. Je ne sais pas pourquoi, mais je ne suis absolument pas un expert Flash ou un expert YouTube.

Voir http://gutfullofbeer.net/youtube.html (comme ce qui est tapé ci-dessus )

Je suis coincé avec ce problème pendant deux jours .. tous les problèmes liés à youtube variable joueur était lié à l'exécuter localement. Après une adresse trucage par les fenêtres / hosts il fonctionne parfaitement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top