質問

JSFLを使用してフラッシュCS5.5用のSWFPANELを作成しようとしています。 InterfaceをFlashで作成し、JSFLコマンドと通信しようとします。したがって、.flaファイルでは、callbackを備えた外部インターフェイスを使用して、jsflで特定の関数を呼び出し、次にreturnのために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); エラーがあります:la ou les erreurs javascript suivantes se sont deduites lors de l'excution de airmobileframework:la ou les erreur(s)javascript suivantes se sont produites:

何か案が ??

役に立ちましたか?

解決

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
}

他のヒント

これは、JSFLからアレイを前後に渡すために必要なものです。 http://exanimo.com/actionsicript/jsflinterface/

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top