4

私はこれについて私の仲間とチャットしていました.

それがまったく可能かどうか疑問に思っています。外部からダウンロードした SWF 内にあるクラスとして var を入力してからインスタンスを作成しようとしましたが、できません。

いくつかのコード

private static function onCompleteHandler(e:Event) {
dashboardObject = e.target.content;
// registerClassAlias("Dashboard", ); doesnt work
var dash:Class = getDefinitionByName("Dashboard") as Class;
var myDash = new dash();
trace(myDash.show);
}

エラー

ReferenceError: Error #1065: Variable Dashboard is not defined.
at global/flash.utils::getDefinitionByName()
at System$/onCompleteHandler()

そのため、プロジェクト SWF 内でコンパイルされていない限り、クラスのインスタンスを作成できないようです。本当なら、それが私がやりたいことです。私がここで構築しているものの SWF ファイルをダウンロードするだけで、私のクラスのインスタンスを作ろうとする人を望んでいません。

ありがとう

4

5 に答える 5

7

次の 2 つのことを行う必要があります。

  1. Dashboardパッケージ ( )を与えますpackage.to.Dashboard。パッケージのないクラスには、コンパイルされた形式で、パッケージを含むクラスとは異なる属性 (保護された名前空間) が与えられるため、外部の SWF からアクセスできなくなります。
  2. ロードした SWF が親と同じ ApplicationDomain にロードされていることを確認します

getDefinitionByNameその後、ロードされた SWF とnewreturnから使用できるようになりますClass

于 2009-10-28T16:24:13.773 に答える
3
var loader:Loader = new Loader();
var req:URLRequest = new URLRequest("foo.swf");
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fooLoadComplete);
loader.load(req);


function fooLoadComplete(e:Event):void
{
    var ClassDefinition:Class = e.target.applicationDomain.getDefinition("Symbol1") as Class;
    var sym1:MovieClip = new ClassDefinition();

    this.addChild(sym1);
}
于 2010-08-17T05:55:53.853 に答える
0

そのため、プロジェクト SWF 内でコンパイルされていない限り、クラスのインスタンスを作成できないようです。

ModuleLoaderクラスをお試しください。モジュールの作成方法については、この記事を参照してください。

于 2009-10-28T03:13:56.693 に答える
0

あなたはこれをしたいかもしれません:

var dash:Class = Loader(e.target).contentLoaderInfo
    .applicationDomain.getDefinition("Dashboard")  as  Class;

getDefinitionByName()外部swfではなく、現在のswfによってロードされたクラスに対して機能します。外部 SWF の場合、特定の SWF を実際にロードしたローダー オブジェクトの参照を指定する必要があります。

また、FlashBuilder でこれを行う場合は、読み込んでいる SWF の「メイン アプリケーション」がスプライト(または、テストしていませんが、おそらくムービークリップ) であることを確認してください。新しい SWF プロジェクト用に作成されたデフォルトの MXML ファイルを取得します)。そうしないと、上記のコードは探しているクラス定義を見つけることができません。

于 2009-10-31T15:16:07.327 に答える