2

次の JavaScript コードに相当する AS3 を探しています。

var funcName = "foo();"
var fHandler = new Function("a",funcName  + "return a + 1"); 

fHandler // now equals a function like function(a){ foo(); return a + 1 }

わかりました、それは非常に単純化された例です

全体像は次のとおりです。JavaScript クライアントで動作するサーバーがあります。このサーバーが返すすべての応答は、サーバーの応答を引数として提供する JavaScript 関数へのコールバックです。

そのため、面倒な厳密な JSON プロトコルは使用しません (有効な Object-Literal であるためにそのような引用符を必要としない属性名を引用符で囲み、その他 AS3 で有効な Object-Literal であるいくつかの小さな違いがあります)。 、サーバーはすでに 100 を超える API を実装しています。

しかし、現在、モバイル デバイス用の Air クライアントを作成したいという要求があります。

次のことができれば、それは素晴らしいことです。これは有効な EMCA スクリプトですが、AS3 には通用しません

public function responseFromServer(String:s){
    s = chopCallbackWrap(s); //strips the 'myCallback(' and ')' parts
    //s is now always a string describing a valid Object-Literals not necessarily JSON
    return new Function("", " return " + s ) ();
}

もう 1 つの側面は、サーバーからオンザフライで配布される汎用クライアント アルゴリズムでの処理です。

AS3でそれを行う方法は何ですか?

4

2 に答える 2

3

私が見る2つの解決策があります:

最初に、必要なスクリプトを使用してランタイムで新しい swf ファイルを作成し、それを にロードしLoader.loadBytes()ます。

このライブラリas3abcas3swf、およびas3commonsを確認することをお勧めします。私はそれらを使用した経験はありませんが、それらはすべて実行時に swf を作成および公開できます (公開された swf 内でのスクリプト作成をサポートしていないものもあるため、実験用のタスクです)。

2 つ目は、JS を経由して実行しExternalInterface、その結果を as3 で使用することです。

UPD: AS3 用のもう 1 つのライブラリ AS2evalアナログ - D.eval

于 2013-02-21T12:49:37.190 に答える
1

これは AS3 (または 2) では不可能です。ランタイムにスクリプト コンパイラが組み込まれていないためです (つまり、AS3 プログラム内から AS3 コードを動的に解釈することはできません)。また、eval 関数もありません (というか、JavaScript の eval が行うことを行いません)。

おそらく、フラッシュ バージョン用に別の API を作成するか、何らかの方法で外部の JavaScript エンジンをプラグインする必要があります。

于 2013-02-21T12:11:05.463 に答える