3

外部 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 はセキュリティ エラーなしで読み込まれます。埋め込みクラスをメイン オブジェクトにキャストしようとすると、問題が発生します。

これはどうにか解決できないでしょうか???

4

1 に答える 1

2

を使用してコードを機能させることができます
var clip3:* = externalSwf.getEmbedded();
。コードの警告を無料で維持したい場合は、interface
var clip3: TplayerInterface = externalSwf.getEmbedded() as TplayerInterface;

于 2012-06-05T23:31:24.963 に答える