2010-07-30 13 views
5

Ho un video di youtube incorporato che desidero applicare all'API di YouTube. Aggiungo il parametro URL utilizzando jQuery come segue (demo):Abilita l'API di YouTube sul lettore esistente

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

Questo metodo funziona alla grande in Firefox, ma non a tutti in IE o Chrome (non sono sicuro di altri browser). Quindi la mia domanda è: come posso modificarlo per far funzionare l'API in altri browser? Dovrei rimuovere completamente l'oggetto e sostituirlo usando SWFObject?

Nota: il codice di incorporamento è direttamente da YouTube.


Update: ho capito se rimuovere l'oggetto, aggiungere i parametri URL quindi aggiungere l'oggetto indietro, ora posso farlo funzionare in Chrome, ma ancora non IE (updated demo).


Addendum: Perché l'API di YouTube non funziona quando l'oggetto/embed ha già il codice di abilitazione al suo interno? Sto cercando di evitare di rendere SWFObject una dipendenza.

<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

Il il problema sembra essere che Chrome e IE non aggiornano il DOM/embed api per l'elemento quando si cambia l'attributo src. Il codice funziona se aggiungi le querystrings direttamente nel codice. Il tuo sito richiede che sia aggiunto dinamicamente? – aolde

+0

@Manticore: Non è un requisito, sto provando a modificare un plugin. Il codice/link video viene aggiunto dall'utente in un elenco, quindi stavo cercando di determinare il modo più semplice per farlo funzionare senza impostare alcuna regola come nessun tag embed. – Mottie

+0

Ho avuto lo stesso problema e IE ha iniziato a comportarsi in modo appropriato per me dopo aver aggiunto l'attributo classid = "clsid: D27CDB6E-AE6D-11cf-96B8-444553540000" aggiunto da SWFObject. – kamens

risposta

2

Riguardo a swfobject - sì. IE considera gli embed flash leggermente diversi (grazie activex) rispetto a tutti gli altri browser. controlla this article per avere un'idea del perché e lo SWFObject documentation per ulteriori informazioni.

Inoltre, ho recentemente creato un plugin jQuery per aiutare a controllare il player incorporato utilizzando l'API del player (in pratica quello che stai facendo).

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

+0

Quindi sembra che tu stia dipendendo dal plugin SWFObject. Sto cercando di trovare l'essenza del problema. Scavare attraverso il codice SWFObject per trovare le differenze tra i browser non è stato molto rivelatore per me. – Mottie

+0

Mi sono arreso e ho appena utilizzato il plug-in SWFObject, quindi contrassegnerò la risposta come accettata anche se non riesco ancora a trovare l'essenza del problema. Grazie comunque! – Mottie

1

IE non sta trovando $('object') forse perché è necessario specificare il tipo giusto (fare un avviso sulla lunghezza obj), ma se lo fai obj = $('embed') esso lavorerò. Potrebbe essere saggio avvolgere le cose in un modo diverso, ovvero fare $('<div id="test/>') e quindi aggiungere gli oggetti embed/e modificare i valori src e movie.

EDIT: IE non sembra registrare object fino a quando non ha un attributo type o clsid specificati, per esempio

EDIT # 2: Si può probabilmente solo ispezionare l'outerHTML dell'elemento oggetto @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

Non ho potuto duplicare il problema con IE non trovando '$ ('oggetto')' anche senza un CSID, almeno in IE8. Ho provato ad aggiungere l'HTML grezzo usando 'outerHTML' come fa il file SWFObject, ma non sembrava fare alcuna differenza. – Mottie

+0

Ho provato in IE6, fyi .. –

Problemi correlati