Aufrufen einer Flex/AS3 Rückruf von Javascript

Ich habe eine Javascript-API, die sollte verwendbar sein, die mit GWT und Flex. Mit der FABridge es ist wirklich einfach zu nennen Javascript-Methoden aus AS3 und Umgekehrt. Aber wenn ich versuche, registrieren Sie einen Rückruf zu einer AS3-Methode in meinem Javascript-API stecken ich. Hier ist eine kurze code-Beispiel:

public function initApp():void {
    if (ExternalInterface.available) { 
        ExternalInterface.addCallback("foobar", foobar);
}
}

public function foobar():void {
    //the callback function
    Alert.show("Callback from API works!");
}

private function btnCallbackClicked():void {
    ExternalInterface.call("testAPICallbackFromJS", Application.application.foobar);
}

Und die einfache JS-Methode:

function testAPICallbackFromGWT(callback){
  $clinit_26(); //added by the GWT compiler
  alert('callback to be launched 3 2 1');
  callback();
}

Aber diese version funktioniert nicht, da erhalte ich immer eine leere Funktion in meinem JS-code. Es scheint, dass die FABridge ist, schneiden Sie den rest.
Dann habe ich versucht einen anderen Ansatz. Ich schrieb einen kleinen JS-Methode, die den Namen der Funktion und erstellt den Rückruf von der JS-Seite.

registerFlexCallback = function(registerMethod, callback, id) {
    /*
    workaround to create a callback for an AS method, which can be called by Javascript
        * registerMethod - Javascript method which shall be called for registration with the created callback as parameter
        * callback - AS method that shall be called by Javascript (available over the FABridge interface)
        * id - ID of the flash object (use Application.application.id in AS)
    */
    var swf = document.getElementById(id);
    eval(registerMethod + "(swf." + callback + ");");
};

Dieser arbeitet gut mit dem Internet Explorer, aber mit keinem anderen browser. Zum Beispiel in Firefox bekomme ich die folgende Fehlermeldung:

NPMethod called on non-NPObject wrapped JSObject!

Kann jemand mir sagen, was dieser Fehler (vielleicht eine Art von Sicherheits-Problem)? Oder hat jemand eine bessere Idee, wie das zu schaffen Rückrufe für meine AS3 Methoden, die aufgerufen werden können, von JS?

InformationsquelleAutor SilentGert | 2009-09-28
Schreibe einen Kommentar