Ich arbeite an einem Flash-Spiel, das ein wenig Javascript auf der Seite aufrufen und Daten von ihm abrufen muss. Javascript aus Flash aufrufen funktioniert. Aufruf der Flash-Funktionen aus Javascript (oft) nicht.
Ich verwende das Gaia-Framework .
Was passiert:
ExternalInterface.call()
, um eine Javascript-Funktion aufzurufen. Das funktioniert.
ExternalInterface.addCallback()
. TypeError: myFlash.testCallback is not a function
. addCallback()
registriert wurden. Gaia und einige seiner enthaltenen Bibliotheken verwenden addCallback()
, und das Aufrufen dieser Funktionen aus Javascript erzeugt auch den TypeError. addCallback()
löst den Fehler nicht regelmäßig ExternalInterface.available = true
und ExternalInterface.objectID
den korrekten Namen für das Flash-Einbettungsobjekt. document.getElementById('myflashcontent')
das Flash-Einbettungsobjekt korrekt zurück. Bearbeitet zum Hinzufügen:
ExternalInterface.addCallback()
sind in einen Block try...catch
eingeschlossen. Wenn der JS-Fehler auftritt, wird der catch
-Block nicht ausgelöst. Es ist ein stiller Fehler. allowScriptAccess = always
. flash.system.Security.allowDomain("mydomain")
behebt den Fehler nicht. Aus meiner Seitenklasse:
%Vor%Mein Javascript:
%Vor% Aufrufe, die über ExternalInterface an JS gesendet werden, sind in einen try { }
-Block eingeschlossen, was dazu führt, dass nachfolgende JS-Fehler unterdrückt werden.
Eine Umgehung für dasselbe ist, eine Funktion in JavaScript zu schließen und den tatsächlichen Code nach einer Zeitüberschreitung auszuführen.
Beispiel:
%Vor%Hier war unser Szenario, nachdem wir alle Bedingungen eingegrenzt hatten:
In diesem speziellen Szenario würde ExternalInterface.call () nicht sofort ausgelöst. Es funktionierte nur nach dem Erstellen einer winzigen Verzögerung mit Timer-Klasse.
Wenn wir wmode = window gemacht oder die alert () entfernt haben - alles hat funktioniert. Verwenden Sie console.log (), um Debug-Text in Firebug anzuzeigen.
Der andere Gotcha? Ob Ihre js-Funktion ein Array oder ein Objekt im Vergleich zu einer Zeichenfolge zurückgibt. Überraschenderweise wurde das native js-Array von einem Array in Flash interpretiert. Versuchen Sie, Informationen zu Ihren Rückgabedaten wie folgt auszugeben:
%Vor%Sie können diese Art von Fehlermeldung sehen, wenn in Flash während des Anrufs ein Fehler aufgetreten ist. So etwas wie eine nicht abgefangene Ausnahme.
Laufen Sie die Debug-Version des Players? Das könnte dir mehr Informationen darüber geben, was vor sich geht.
Ist das auch konsistent für alle Browser? Ich habe alte Versionen von IE gesehen, die Probleme beim Akzeptieren mehrerer aufeinanderfolgender Flash & lt; - & gt; JS ruft an.
J
Haben Sie das in JavaScript versucht?
%Vor%Ich hatte das in vielen Fällen benutzt.
Wieder musste ich an bestimmten Stellen die Funktionen __flash_addCallback und _ flash _removeCallback neu definieren, um die Fehler zu minimieren.
Zur Zeit kann ich mich nicht erinnern, was ich für __flash_addCallback gemacht habe, aber das habe ich für letzteres getan:
%Vor%Wir sind auf dasselbe Problem gestoßen, und nur in Firefox.
Nach dem Rat von THM konnten wir eine Lösung finden.
In unserem Fall befand sich die swf, die eingefügt wurde, in einem div, das mit jQuery.slideDown () in die Ansicht animiert wurde. Dies führt dazu, dass es beim Starten manchmal neu gestartet wird. In einigen Fällen führte dies dazu, dass die Callback-Funktionen nicht verfügbar waren.
Wurde behoben, indem swfobject.embedSWF erst aufgerufen wurde, nachdem der slideDown-Effekt beendet wurde.
Ich habe diesen Fehler erhalten, weil ich dieselbe Flash-Datei mehrmals auf der Seite hatte. Obwohl jede von ihnen eine andere ID / einen anderen Namen hatte, verwendeten sie alle denselben Callback.
Tags und Links javascript flash actionscript-3 swfobject externalinterface