外部 SWF をロードします。外部 SWFにはDisplayObject (getChildAt(0))が埋め込まれており、次のコードでそのクラスのインスタンスを取得します。
public function getEmbedded():* {
var _class:Class = loaderInfo.applicationDomain.getDefinition(getQualifiedClassName(getChildAt(0))) as Class;
return new _class();
}
ここまでは順調ですね。メイン SWF (上記の外部 SWF をロードする) と外部 SWFが同じドメイン (ローカルまたはオンライン) にある場合、メインSWFと外部SWFのクラスは一致します。
たとえば、外部 SWF にfanlib.tween.TPlayerオブジェクトを埋め込んだとします。メインの SWF では、次のことを行います。
var clip3:fanlib.tween.TPlayer = externalSwf.getEmbedded();
そしてそれはうまくいきます。
しかし!!!
外部 SWF が別のドメインからロードされた場合、クラスは一致しません!!!
次のようなエラーが表示されます。
[障害] 例外、情報 = TypeError: エラー #1034: 型の強制に失敗しました: fanlib.tween::TPlayer@2563221 を fanlib.tween.TPlayer に変換できません。
これはcrossDomainの問題ではありません。XMLファイルとセキュリティ コンテキストを正しく設定しており、外部 SWF はセキュリティ エラーなしで読み込まれます。埋め込みクラスをメイン オブジェクトにキャストしようとすると、問題が発生します。
これはどうにか解決できないでしょうか???