2012-10-08 16 views
6

UPDATE: La premessa di questa domanda si è rivelata errata. Il problema non si verifica a meno che lo spostamento non sia in risposta a un clic dell'utente. Si prega di vedere here.IE9 + jwplayer: __flash__add Errore callback se sposta player in dom prima di chiamare player.load()


ho bussato la testa contro un bug per alcuni giorni e spero che qualcuno possa aiutare.

Ho uno script jquery che effettua chiamate a un oggetto jwplayer ("myplayer") utilizzando jwplayer javascript api. Ad esempio, per caricare myplayer con un particolare video, che io chiamo:

myplayer.load('my_url'); 

Questo funziona bene sia in Firefox e Internet Explorer, finché non mi muovo prima il giocatore in una posizione diversa nel DOM.

Tuttavia, il mio script a volte sposta il lettore dalla posizione A alla posizione B e quindi torna alla posizione A, prima di chiamare myplayer.load(). Questo funziona bene in Firefox. Ma in Internet Explorer 9, ottengo un errore su questa linea:

return eval(instance.CallFunction("<invoke name=\""+name+"\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments,0) + "</invoke>")); 

che si trova all'interno di questa funzione:

function __flash__addCallback(instance, name) { 
    instance[name] = function() { 
    return eval(instance.CallFunction("<invoke name=\""+name+"\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments,0) + "</invoke>")); 
    } 
} 

Se traccio ciò che sta accadendo nel debugger Internet Explorer, vedo che myplayer.load('my_url') chiama this.callInternal("jwLoad",u) in jwplayer.js ed è apparentemente durante l'esecuzione di this.callInternal("jwLoad",u) che si verifica l'errore.

Dettagli:

il codice HTML simile a questa:

<div id='stage'> 
    <div id='myplayer_wrapper'> 
     <object id='myplayer'>...</object> 
    </div> 
</div> 
<div id='holding-pen'></div> 

Quando non è in uso il giocatore, mi muovo suo involucro-div al possesso-penna:

var el = $('#myplayer_wrapper');    
$('#holding-pen').append(el); 

Dopo aver spostato il wrapper-div del lettore nella penna di tenuta, l'html ora appare:

<div id='stage'></div> 
<div id='holding-pen'> 
    <div id='myplayer_wrapper'> 
     <object id='myplayer'>...</object> 
    </div> 
</div> 

quando voglio utilizzare il lettore, mi muovo suo involucro-div torna alla fase-div:

var el = $('#myplayer_wrapper');    
$('#stage).append(el); 

Dopo aver spostato involucro-div del giocatore alla fase-div, gli sguardi html lo stesso come ha fatto in origine:

<div id='stage'> 
    <div id='myplayer_wrapper'> 
     <object id='myplayer'>...</object> 
    </div> 
</div> 
<div id='holding-pen'></div> 

al caricamento della pagina, creo il giocatore-oggetto e spostarlo alla holding-penna. Poi lo trasferisco sul palco e carica un video.

Se l'utente fa clic, ad esempio su una miniatura di immagine, sposto il riproduttore video sulla penna di tenuta e sposta l'immagine selezionata sullo stage.

Se l'utente fa clic su una miniatura del video, recupero il lettore video dallo stilo e lo sposto sul palco. Quindi caricare il lettore con il video selezionato.È qui che si verifica il problema "_ flash _addCallback" in Internet Explorer.

Qualcuno ha qualche idea di cosa sta succedendo? O qualche suggerimento su come posso farlo funzionare su internet explorer?

Grazie mille!

+0

potrebbero essere correlati: https://github.com/johndyer/mediaelement/issues/530 – greg0ire

+0

Can crei un violino dimostrando il problema? Anche il collegamento Aggiornato nella parte superiore della domanda non è disponibile. – Trevor

+0

http://stackoverflow.com/questions/12823994/ie9-move-and-load-flash-player-in-response-to-user-click-load-fails ..... questo collegamento non funzionava, I l'ho cambiato con questo .... http://www.longtailvideo.com/support/forums/jw-player/bug-reports/28999/ie9-move-and-load-player-in-response-to-user -click-load-fail/ – Hitesh

risposta

1

Questo sembra essere un problema noto con IE (6, 7, 8 & 9) per quanto riguarda i vari messaggi sul web. Dipende dalla combinazione delle versioni Flash e delle versioni IE.

IE ha, apparentemente, i metodi riservati per le parole che ci si aspetterebbe da lettori multimediali:

  • gioco
  • fermata
  • pausa
  • lunghezza

... e la funzione __flash__addCallback() sembra utilizzare le stesse parole. play e stop sono una parte vitale dei film Flash e dettano quando giocano o si fermano. Non posso confermare se le versioni successive di Flash hanno modificato questo.

Fonti sostengono questa:

Un tocco interessante: http://beweb.pbworks.com/w/page/53110280/Flash%20IE8%20Javascript%20Error

Alcune persone raccomandano di usare SWFObject per aggirare problemi del browser come questo, altri hanno esaminato il modo in cui Soundcloud ha sistemato il loro lettore, anche se lo this SoundCloud article frantuma ogni speranza.

Alla fine della giornata, il problema si trova su come Flash si aspetta JavaScript per comunicare con se stesso, che si arresta in modo anomalo con i metodi riservati in IE. Potrebbe essere necessario:

  • aggiornamento tua jwplayer
  • creare un problema su jwplayer 's bug tracker
  • rendono una soluzione per il problema da soli ...

Qualcosa che mi ha aiutato ad aggirare molti problemi di IE sta cambiando il DOCTYPE a <!DOCTYPE html>. Semplice ma efficace. Si noti che IE7 preferisce che la parola DOCTYPE sia scritta maiuscola. Ogni volta che ci provo so che mi sono trasformato in uno zombi disperato.: P

E, ultimo ma non meno importante, assicurarsi che si chiude l'ultimo singolo citazione di seguito:

$('#stage).append(el); 
+0

Sto avendo lo stesso identico messaggio con [questo sito web] (http://www.mediatheque-numerique.com/), quindi la taglia. Il problema si verifica quando riproduci il primo video, quindi passa a quello successivo utilizzando le miniature a sinistra, quindi riproduci il secondo video. – greg0ire

+0

Aggiornato la mia risposta, spero che aiuti! –

+0

+1, sembra utile. Ho intenzione di provare a installare una VM in modo da poter verificare questo. – greg0ire