2010-07-30 20 views
5

Tengo un video de youtube embebido que quiero que se aplique la API de YouTube. Agrego el parámetro url usando jQuery de la siguiente manera (demo):Habilitar la API de YouTube en el reproductor existente

$(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(); 
}) 
}); 

Este método funciona muy bien en Firefox, pero no del todo en el IE o Chrome (no estoy seguro acerca de otros navegadores). Entonces mi pregunta es ¿cómo modifico esto para que la API funcione en otros navegadores? ¿Tendría que eliminar completamente el objeto y reemplazarlo usando SWFObject?

Nota: El código de inserción es directamente de YouTube.


Actualización: Me di cuenta de si quito el objeto, añadir los parámetros de URL a continuación, añadir el objeto de nuevo, ahora puedo conseguir que funcione en Chrome, pero todavía no IE (updated demo).


Addendum: ¿Por qué la API de YouTube no funciona cuando el objeto/inserción ya tiene el código de habilitación dentro de él? Estoy tratando de evitar que SWFObject sea una dependencia.

<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

El parece que el problema es que Chrome e IE no actualizan la API/incrustación de la API para el elemento cuando se cambia el atributo src. El código funciona si agrega las cadenas de consulta directamente en el código. ¿Su sitio requiere que se agregue dinámicamente? – aolde

+0

@Manticore: no es un requisito, estoy tratando de modificar un complemento. El código/enlace de video es agregado por el usuario en una lista, así que estaba tratando de determinar la forma más fácil de hacerlo funcionar sin establecer ninguna regla como no insertar etiquetas. – Mottie

+0

Tuve el mismo problema e IE comenzó a comportarse de forma adecuada después de agregar el atributo classid = "clsid: D27CDB6E-AE6D-11cf-96B8-444553540000" que SWFObject agrega. – kamens

Respuesta

2

En cuanto a swfobject - sí. IE trata las incrustaciones flash de forma ligeramente diferente (gracias activex) que todos los demás navegadores. echa un vistazo a this article para tener una idea de por qué, y el SWFObject documentation para más información.

Además, recientemente creé un plugin de jQuery para ayudar a controlar el reproductor insertado usando la API de jugador (básicamente lo que estás haciendo).

comprobar que funciona, que es el plugin jQuery TubePlayer - http://www.tikku.com/jquery-youtube-tubeplayer-plugin

+0

Parece que depende del complemento SWFObject. Estoy tratando de encontrar la esencia del problema. Explorar el código de SWFObject para encontrar las diferencias entre los navegadores no me ha resultado muy revelador. – Mottie

+0

Me rendí y acabo de utilizar el complemento SWFObject, por lo que voy a marcar su respuesta como aceptada, aunque todavía no pude encontrar la esencia del problema. ¡Gracias! – Mottie

1

IE no es encontrar $('object') tal vez porque es necesario especificar el tipo correcto (hacer una alerta sobre la longitud obj), pero si lo hace obj = $('embed') se Trabajare Puede ser conveniente ajustar las cosas de otra manera, es decir, haga $('<div id="test/>') y luego agregue los objetos incrustados/y cambie los valores src y movie.

EDIT: IE no parece registrar object hasta que tenga un atributo type o clsid especificado, por ejemplo

editar # 2: Usted probablemente puede inspeccionar el outerHTML del elemento de objeto @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

No pude duplicar el problema con IE sin encontrar '$ ('object')' incluso sin un CSID, al menos en IE8. Intenté agregar el HTML sin formato usando 'outerHTML' como el archivo SWFObject, pero no pareció hacer ninguna diferencia. – Mottie

+0

He probado en IE6, fyi .. –

Cuestiones relacionadas