Adobe のドキュメント ( Loader#securityDomain ) によると:
インポートの読み込みが成功するためには、読み込まれた SWF ファイルのサーバーに、読み込み中の SWF ファイルのドメインを信頼するポリシー ファイルが必要です。
トリックは、swf をロードするときにクロスドメイン ファイルをチェックするように Loader に指示することですtrue
。LoaderContext
たとえば、.
var request:URLRequest = new URLRequest(_file.url);
var context:LoaderContext = new LoaderContext(true, null, SecurityDomain.currentDomain);
var loader:Loader = new Loader();
loader.load(request, context);
付随する cross-domain.xml は、子 SWF と同じ場所、またはその親フォルダーの 1 つに配置する必要があります。Adobe のドキュメントによると、制限のないクロスドメイン ファイルは次のとおりです。
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" secure="false"/>
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
</cross-domain-policy>
これを簡単にするもう 1 つの方法は、クラスの代わりにインターフェイスを渡すことです。これにより、競合するコードを効果的にバイパスできます。子は実行時にデフォルトで親クラスからインターフェイスを継承するため、これは機能します ( Loader#applicationDomainポイント #1 を参照)。子クラスは、オブジェクトがインターフェイスに準拠している限り、各オブジェクトの独自のバージョンを安全にインスタンス化できます。例えば:
var applicationDomain:ApplicationDomain = loader.contextLoaderInfo.applicationDomain;
var classDefinition:Class = applicationDomain.getDefinition("MyBigAwesomeClass") as class;
var instance:IMyBigAwesomeInterface = new classDefinition() as IMyByAwesomeInterface;
MyBigAwesomeClass の定義は次のようになります。
public class MyBigAwesomeClass implements IMyBigAwesomeInterface
{
...
}