2010-07-30 8 views
5

J'ai une vidéo YouTube incorporée dans laquelle je souhaite appliquer l'API YouTube. Ajouter le paramètre URL en utilisant jQuery comme suit (demo):Activer l'API YouTube sur un lecteur existant

$(document).ready(function(){ 
var obj = $('object'); 
obj.find('embed').attr('src', function(i,s){return s+'&enablejsapi=1&version=3'}) 
obj.find('param[name=movie]').attr('value', function(i,v){return v+'&enablejsapi=1&version=3'}) 

$('.play').click(function(){ 
    obj.find('embed')[0].playVideo(); 
}); 
$('.pause').click(function(){ 
    obj.find('embed')[0].pauseVideo(); 
}) 
}); 

Cette méthode fonctionne très bien dans Firefox, mais pas du tout dans IE ou Chrome (pas sûr d'autres navigateurs). Donc, ma question est comment puis-je modifier cela pour faire fonctionner l'API dans d'autres navigateurs? Devrais-je supprimer complètement l'objet et le remplacer par SWFObject?

Remarque: Le code d'intégration provient directement de YouTube.


Mise à jour: je me suis dit si je supprime l'objet, ajoutez les paramètres d'URL, puis ajouter l'objet en arrière, je peux maintenant obtenir pour travailler dans Chrome, mais pas encore IE (updated demo). Addenda: Pourquoi l'API YouTube ne fonctionne-t-elle pas lorsque l'objet/l'embed possède déjà le code d'activation? J'essaie d'éviter de rendre SWFObject dépendante.

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="640" height="385"> 
<param name="movie" value="http://www.youtube.com/v/2Qj8PhxSnhg&amp;hl=en_US&amp;fs=1&enablejsapi=1&version=3"></param> 
<param name="allowFullScreen" value="true"></param> 
<param name="allowscriptaccess" value="always"></param> 
<embed src="http://www.youtube.com/v/2Qj8PhxSnhg&amp;hl=en_US&amp;fs=1&enablejsapi=1&version=3" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed> 
</object> 
+0

Le problème semble être que Chrome et IE ne met pas à jour le DOM/embed api pour l'élément lorsque vous modifiez son attribut src. Le code fonctionne si vous ajoutez les chaînes de requête directement dans le code. Votre site nécessite-t-il d'être ajouté dynamiquement? – aolde

+0

@Manticore: Ce n'est pas une obligation, j'essaie de modifier un plugin. Le code/lien vidéo est ajouté par l'utilisateur dans une liste, donc j'essayais de déterminer la façon la plus simple de faire ce travail sans définir de règles comme les balises d'intégration. – Mottie

+0

J'ai eu ce même problème, et IE a commencé à se comporter de manière appropriée pour moi après avoir ajouté l'attribut classid = "clsid: D27CDB6E-AE6D-11cf-96B8-444553540000" que SWFObject ajoute. – kamens

Répondre

2

En ce qui concerne swfobject - oui. IE traite les flash embarqués légèrement différemment (merci activex) que tous les autres navigateurs. consultez this article pour avoir une idée de pourquoi, et le SWFObject documentation pour plus d'informations.

En outre, j'ai récemment créé un plugin jQuery pour aider à contrôler le lecteur intégré en utilisant l'API du lecteur (essentiellement ce que vous faites).

Check it out, il est le plugin TubePlayer jQuery - http://www.tikku.com/jquery-youtube-tubeplayer-plugin

+0

Il semble donc que vous dépendiez du plugin SWFObject. J'essaie de trouver l'essence du problème. Creuser le code SWFObject pour trouver les différences entre les navigateurs n'a pas été très révélateur pour moi. – Mottie

+0

J'ai abandonné et je suis juste allé avec l'utilisation du plugin SWFObject, donc je vais marquer votre réponse comme acceptée même si je ne pouvais toujours pas trouver l'essence du problème. Merci quand même! – Mottie

1

IE ne trouve pas $('object') peut-être parce que vous devez spécifier le type (faire une alerte sur la longueur de obj), mais si vous le faites obj = $('embed') il travaillera. Il peut être judicieux d'envelopper les choses d'une manière différente, c'est-à-dire $('<div id="test/>') puis d'ajouter les objets embed/et de changer les valeurs src et movie.

EDIT: IE ne semble pas enregistrer object jusqu'à ce qu'il ait un type ou clsid attribut spécifié, par exemple

EDIT # 2: Vous pouvez probablement inspecter tout le outerHTML de l'élément d'objet @http://savedbythegoog.appspot.com/retrieve_cache?unique_id=http://code.google.com/apis/ajax/playground/samples/boilerplateHTML/youtube/chromeless.html|http://code.google.com/apis/ajax/playground/samples/js/youtube/chromeless.js&defaultSample=true

+0

Je ne pouvais pas reproduire le problème avec IE ne trouvant pas '$ ('object')' même sans un CSID, au moins dans IE8. J'ai essayé d'ajouter le HTML brut en utilisant 'outerHTML' comme le fait le fichier SWFObject, mais cela ne semblait pas faire de différence. – Mottie

+0

J'ai testé dans IE6, fyi .. –