2012-10-08 2 views
6

UPDATE: Die Prämisse dieser Frage erwies sich als fehlgeleitet. Das Problem tritt nicht auf, es sei denn, die Verschiebung erfolgt als Reaktion auf einen Benutzerklick. Bitte sehen Sie here.IE9 + jwplayer: __flash__addCallback Fehler, wenn Spieler in Dom vor dem Aufruf player.load() verschieben


Ich habe meinen Kopf für ein paar Tage gegen einen Fehler geschlagen und hoffe, dass jemand helfen kann.

Ich habe ein jquery-Skript, das Aufrufe an ein jwplayer-Objekt ("myplayer") unter Verwendung der jwplayer javascript api. Zum Beispiel mit einem bestimmten Video zu laden MyPlayer, nenne ich:

myplayer.load('my_url'); 

Dies funktioniert in feine Firefox und Internet Explorer, so lange ich nicht zuerst tue in dem DOM die Spieler an einen anderen Ort bewegen.

Allerdings verschiebt mein Skript manchmal den Player von Standort A zu Standort B und dann zurück zu Standort A, bevor myplayer.load() aufgerufen wird. Das funktioniert gut in Firefox. Aber im Internet Explorer 9, bekomme ich einen Fehler auf dieser Linie:

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

, die innerhalb dieser Funktion ist:

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

Wenn ich verfolgen, was im Internet Explorer Debugger geschieht, sehe ich, dass myplayer.load('my_url') Anrufe this.callInternal("jwLoad",u) in jwplayer.js, und es ist offensichtlich, während der Ausführung this.callInternal("jwLoad",u), dass der Fehler auftritt.

Details:

Die html etwa wie folgt aussehen:

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

Wenn die Spieler nicht benutzt wird, ich seinen Wrapper-div auf die Haltefeder bewegen:

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

Nach dem Verschieben der Wrapper-Div des Players auf den Haltestift sieht das HTML jetzt wie folgt aus:

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

Wenn ich den Player verwenden wollen, bewege ich seine Wrapper-div zurück auf die Bühne-div:

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

Nach der Spieler-Wrapper-div auf die Bühne-div bewegen, die HTML-Looks das gleiche, wie es ursprünglich tat

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

auf Seite zu laden, erstelle ich das Player-Objekt und an den Haltestift bewegen. Ich bewege es dann auf die Bühne und lade ein Video.

Wenn der Benutzer zum Beispiel auf ein Bild-Thumbnail klickt, verschiebe ich den Video-Player zum Aufnahmestift und bewege das ausgewählte Bild auf die Bühne.

Klickt der Benutzer dann auf ein Video-Thumbnail, rufe ich den Video-Player aus dem Halter und verschiebe ihn zurück auf die Bühne. Ich lade dann den Player mit dem ausgewählten Video.Dies ist, wo das "_ Flash _addCallback" Problem im Internet Explorer auftritt.

Hat jemand einen Einblick in das, was vor sich geht? Oder irgendwelche Vorschläge, wie ich das im Internet Explorer zum Laufen bringen kann?

Vielen Dank!

+0

könnten verwandt sein: https://github.com/johndyer/mediaelement/issues/530 – greg0ire

+0

Can Sie schaffen eine Geige, die das Problem demonstriert? Auch der Aktualisierte Link oben in der Frage ist nicht verfügbar. – Trevor

+0

http://stackoverflow.com/questions/12823994/ie9-move-and-load-flash-player-in-response-to-user-click-load-fails ..... dieser Link funktionierte nicht, ich habe es damit verändert .... http://www.longtailvideo.com/support/forums/jw-player/bug-reports/28999/ie9-move-and-load-player-in-response-in-user -click-load-fails/ – Hitesh

Antwort

1

Dies scheint ein bekanntes Problem mit IE zu sein (6, 7, 8 & 9) soweit verschiedene Beiträge im Web gehen. Dies hängt von der Kombination der Versionen Flash und IE ab.

IE hat, scheinbar, reservierte Methoden für die Worte eines von Media-Player erwarten:

  • Spiel
  • Anschlag
  • Pause
  • Länge

... und Die __flash__addCallback() Funktion scheint dieselben Wörter zu verwenden. play und stop sind ein wichtiger Teil der Flash Filme und diktieren, wenn sie spielen oder aufhören. Ich kann nicht bestätigen, wenn spätere Versionen von Flash dies geändert haben.

Quellen unterstützt dies:

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

Einige Leute haben empfohlen, mit SWFObject um Browser-Probleme wie diese zu umgehen, haben andere die Art und Weise betrachtet, wie Soundcloud ihren Player repariert - obwohl this SoundCloud article jeden Funken Hoffnung dort zerbricht.

Am Ende des Tages liegt das Problem auf, wie FlashJavaScript erwartet, mit sich selbst zu kommunizieren, die mit reservierten Methoden in IE abstürzt. Sie müssen möglicherweise auf:

  • Update Ihr jwplayer
  • auf ein Problem erstellen jwplayer ‚s Bug-Tracker
  • eine Abhilfe für das Problem machen sich ...

Etwas Das hat mir geholfen, viele IE-Probleme zu umgehen, ändert den DOCTYPE zu <!DOCTYPE html>. Einfach und doch effektiv. Beachten Sie, dass IE7 bevorzugt, dass das Wort DOCTYPE Großbuchstaben geschrieben wird. Wann immer ich das versuche, weiß ich, dass ich ein verzweifelter Zombie geworden bin.: P

Und last but gelinde nicht, stellen Sie sicher, dass Sie die letzte Apostroph unten schließen:

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

Ich habe genau die gleiche Nachricht mit [dieser Website] (http://www.mediatheque-numerique.com/), daher das Kopfgeld. Das Problem tritt auf, wenn Sie das erste Video abspielen und dann mit den Miniaturansichten auf der linken Seite zur nächsten gehen und dann das zweite Video abspielen. – greg0ire

+0

Aktualisiert meine Antwort, hoffe es hilft! –

+0

+1, es sieht nützlich aus. Ich werde versuchen, eine VM zu installieren, damit ich das testen kann. – greg0ire

Verwandte Themen