9

Flash オブジェクトから公開された関数のリストを取得する方法はありますか? たとえば、次のコマンドを実行すると、オブジェクト内のすべてのメソッドのリストを取得できます。

for (var i in object) {
  if (typeof object[i] == "function") {
    console.log(i);
  }
}

唯一の問題は、ExternalInterfaces API を通じて登録されたメソッドが公開されないことです。関数が存在するかどうか ( object['method']) を試してみると、それが関数であることがわかりますが、この方法ですべての既存のメソッドを推測する必要があります。

注: もちろん、アクション スクリプトにはアクセスできません。

4

5 に答える 5

2

この質問を押すだけで、少し遅れているようですが、とにかく回答を投稿します;) IE10(Windows 7)を使用すると、次のようにすべてのメソッドをリストするのに完全にうまく機能しました:

var obj = document.getElementById('flashObj');
for(var prop in obj){
  var fx = obj[prop];
  if(obj.hasOwnProperty(prop) && (typeof fx == 'function') && /eval\(instance/.test(fx)){
    console.log(prop)
  }
}

IE10 は他のブラウザーのように「ネイティブ コード」を報告しないため、これは Chrome や Firefox では機能せず、正確な正規表現でのみ機能することに注意してください。

于 2013-06-17T11:19:30.830 に答える
1

問題はさらに悪化します。情報はActionScriptでは利用できません。新しい関数をとして登録し、ExternalInterface.addCallback('foo', foo)すでに登録されているコールバックを一覧表示することはできません。

于 2010-04-20T21:59:50.260 に答える
1

あくまで推測ですが、動作するかどうかを確認してください。すべての ExternalInterface 関数は、グローバル名前空間で定義する必要があります。SWF を HTML ページに埋め込んでみて、ページがロードされた後に、そのページに定義されているすべての Javascript 関数を取得してください。JavaScript のグローバル ユーザー定義関数のリスト?

関数のリストは、SWF ファイルで定義されているものでなければなりません。

于 2010-04-28T10:35:46.603 に答える
0

唯一の方法は、SWF ファイルのバイトコードを解析し、メソッドへの呼び出しを収集することだと思いますExternalInterface.addCallback

http://www.google.com/search?q=parse+avm2

于 2010-04-27T18:03:39.640 に答える
-1

私の本能はそうではありません。ExternalInterface は本質的にブラック ボックス、またはブラック レター ボックスです。何かを突っ込むと戻ってくることがありますが、ドアを開けて中身を確認することはできません。

SWF で何が公開されているかについてのドキュメントがない場合、他の唯一の提案は、swf を逆コンパイルしてソースを確認することです。

于 2010-04-15T09:35:21.700 に答える