Ne peut pas contrôler même avec Youtube intégrer document.getElementById ( 'xyz') playVideo () -. Pas une fonction?
-
19-09-2019 - |
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.
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:
-
Edité mon / etc / hosts pour inclure une entrée de retour à mon localhost:
127.0.0.1 testhost.com
-
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>
-
Restarted Apache:
sudo apachectl restart
-
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.