Flash (AS3) を使用してリモート ドメインから Flex SWF を呼び出すにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/14350

質問

でホストされている Flex SWF があります。 http://www.a.com/a.swf。別のドメインに SWF をロードしようとする Flash コードがあります。

_loader = new Loader();
var req:URLRequest = new URLRequest("http://services.nuconomy.com/n.swf");
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderFinish);
_loader.load(req);

onLoaderFinish イベントで、リモート SWF からクラスをロードして作成しようとします。

_loader.contentLoaderInfo.applicationDomain.getDefinition("someClassName") as Class

このコードを実行すると、次の例外が発生します

SecurityError: Error #2119: Security sandbox violation: caller http://localhost.service:1234/flashTest/Main.swf cannot access LoaderInfo.applicationDomain owned by http://www.b.com/b.swf.
    at flash.display::LoaderInfo/get applicationDomain()
    at NuconomyLoader/onLoaderFinish()

このコードを動作させる方法はありますか?

役に立ちましたか?

解決

これはすべてで説明されています Adobe Flex 3 プログラミング ActionScript 3 PDF 550 ページ (第 27 章:Flash Player セキュリティ/クロススクリプティング):

ActionScript 3.0 で作成された 2 つの SWF ファイルが異なるドメインから提供される場合、たとえば、 http://siteA.com/swfA.swf そして http://siteB.com/swfB.swf- その場合、デフォルトでは、Flash Player は swfA.swf による swfB.swf のスクリプト作成、または swfB.swf による swfA.swf のスクリプト作成を許可しません。SWF ファイルは、Security.allowDomain() を呼び出すことによって、他のドメインの SWF ファイルにアクセス許可を与えます。Security.allowDomain("siteA.com") を呼び出すことにより、swfB.swf は siteA.com の SWF ファイルにスクリプトを作成する権限を与えます。

図などを使ってさらに詳しく説明します。

他のヒント

ロードするファイルが存在するサーバー上に、crossdomain.xml ポリシー ファイルが必要になります。このファイルは次のようになります。

<?xml version="1.0"?>
<!-- http://www.foo.com/crossdomain.xml -->
<cross-domain-policy>
  <allow-access-from domain="www.friendOfFoo.com" />
  <allow-access-from domain="*.foo.com" />
  <allow-access-from domain="105.216.0.40" />
</cross-domain-policy>

これを、ロード元のドメインのルートにcrossdomain.xmlとして配置します。

また、このファイルを次のように読み取るようにローダーを設定する必要があります。

var loaderContext:LoaderContext = new LoaderContext();
loaderContext.checkPolicyFile = true;

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onComplete );
loader.load( new URLRequest( "http://my.domain.com/image.png" ), loaderContext );

コードサンプルから抜粋 http://blog.log2e.com/2008/08/15/when-a-cross-domain-policy-file-is-not-enough/

もしかしたら System.Security.allowDomain 必要なものですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top