0

JSFL を使用して Flash CS5.5 用の swfPanel を作成しようとしています。インターフェイスをフラッシュで作成し、JSFL コマンドと通信しようとしました。そのため、私の .fla ファイルでは、ExternalInterface と callBack を使用して JSFL の特定の関数を呼び出し、swfPanel.call() を使用して戻ります。私が遭遇する問題は、呼び出し関数の引数として配列を渡すことができないことです (AS3 関数名の後)。コードは次のとおりです。

AS3 で:

function init():void{
    ExternalInterface.addCallback("callBackPanel", JsflCallback);
    MMExecute("fl.runScript( fl.configURI + \"AirMobileFramework/AirMobileFrameworkPanel.jsfl\", \"checkSettings\" );");
}

function JsflCallback(... args):void{
    jsTrace("callback");
}

function jsTrace(str:String):void{
    MMExecute("fl.trace(\"" + str + "\");");
}

JSFL では:

function checkSettings(){   
    var fileSettingsUrl = fl.configURI + "AirMobileFramework/settings.fwk";
    var exist = FLfile.exists(fileSettingsUrl);
    var result = new Array("settings", exist);

    if(!exist){
        FLfile.write(fileSettingsUrl, "");
    } else {
        result.push(FLfile.read(fileSettingsUrl));
    }

    callPanelBack(result);
}

function callPanelBack(result){
    fl.trace("result: " + result.length + " > " + typeof result + " >> " + result[0]);
    var panel;
    if(fl.swfPanels.length > 0){ 
        for(x = 0; x < fl.swfPanels.length; x++){
            if(fl.swfPanels[x].name == "AirMobileFramework"){ 
                panel = fl.swfPanels[x];
                panel.call("callBackPanel", result); 
                break; 
            } 
        }
    } else {
        fl.trace("No existing panel");
    }
}

panel.call("callBackPanel", result[0], result[1]);を呼び出す場合 問題はありません。コールバックは適切に呼び出されますが、panel.call("callBackPanel", result);を使用すると、I've an error : La ou les erreurs JavaScript suivantes se sont produites lors de l'exécution de AirMobileFramework : La ou les erreur(s) JavaScript suivantes se sont produites :

何か案が ??

4

2 に答える 2

0

これは、JSFLとの間で配列をやり取りするために必要なものです:http://exanimo.com/actionscript/jsflinterface/

そして、これも一週間かそこらでリリースされたら、一見の価値があります:http ://www.xjsfl.com

于 2011-09-24T11:42:01.310 に答える
0

JSFL が配列を解析できないためだと思います。あなたが与えた例では、結果[0]、結果[1]で別々の値(おそらく文字列または数値)があり、問題はありません。

私がすることはこれです:

panel.call("callBackPanel", result.join("@*$");

そして as3 関数では単に arg.split("@*$")

入力に文字列「@*$」が含まれる場合、結果の各アイテムに対して SWF を呼び出すだけで済み、そこでループが終了したら、SWF に情報を収集するように指示できます。 :

function callPanelBack(result){
    fl.trace("result: " + result.length + " > " + typeof result + " >> " + result[0]);
    var panel;
    if(fl.swfPanels.length > 0){ 
        for(x = 0; x < fl.swfPanels.length; x++){
            if(fl.swfPanels[x].name == "AirMobileFramework"){ 
                panel = fl.swfPanels[x];
                panel.call("callBackPanelStart"); 
                for(var i=0; i < result.length; i++){
                    panel.call("callBackPanelArgument", result[i])
                }
                panel.call("callBackPanelEnd"); 
                break; 
            } 
        }
    } else {
        fl.trace("No existing panel");
    }
}

そしてAS3で:

function callBackPanelStart():void
{
    jsflArray = [];
}

function callBackPanelArgument(argument:*):void
{
    jsflArray.push(argument);
}

function callBackPanelEnd():void
{
    // execute whatever you must on the result
}
于 2011-09-18T13:25:47.047 に答える