2009-03-05 5 views
1

SWFLoaderを使用してFlexアプリケーションの内部に埋め込みたいFlashアプリケーション(純粋なAS、Flexフレームワークなし)があります。Flexアプリケーションの複数のインスタンスをFlexアプリケーションに埋め込む

1つのインスタンスを埋め込むことはうまく機能します。しかし、複数のインスタンス(それぞれ別々のSwfLoaderを持つ)を埋め込もうとすると、複数のインスタンスのクラス定義間の衝突によって引き起こされると思われる、実際には奇妙な動作があります。このフラッシュアプ​​リケーションは多くのシングルトンクラスで書かれているので、私の推測では、これらのシングルトンはお互いをオーバーライドし、奇妙な振る舞いを引き起こします。

フラッシュアプ​​リケーションを子アプリケーションドメインに読み込もうとしましたが、それでもどちらも役に立たないようです。誰もこの問題に直面していますか?

+0

2つの異なるアプリケーションで試すことはできますか?そうすれば、あなたのシングルトンを非難するかどうかを確かめることができます。 – dirkgently

+0

2つのアプリケーションが子アプリケーションドメインにロードされると、シングルトンは衝突しません。彼らが衝突するのと同じアプリケーションドメインにロードされるときだけです。バグを見つけるためにさらに調査してみましょう。 – marketer

答えて

2

名前の衝突を避けるために、SWFを独自のアプリケーションドメイン(子ではない)にロードすると便利です。

アプリケーションドメインの3つのタイプがあります

var swfLoader:Loader = new Loader(); 
var loaderContext:LoaderContext = new LoaderContext(); 

// child SWF adds its unique definitions to 
// parent SWF; both SWFs share the same domain 
// child SWFs definitions do not overwrite parents 
loaderContext.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); 

// child SWF uses parent domain definitions 
// if defined there, otherwise its own 
loaderContext.applicationDomain = ApplicationDomain.currentDomain; 

// child SWF domain is completely separate and 
// each SWF uses its own definitions 
loaderContext.applicationDomain = new ApplicationDomain(); 

// Load the swf file 
swfLoader.load(new URLRequest("file.swf"), loaderContext); 

は、それが定義を上書きしませんように私は、最初の方法を使用してお勧めします。

関連する問題