2

私はhttp://www.a.com/a.swfでホストされているFlexswfを持っています。SWFをロードしようとする別のdoaminにフラッシュコードがあります。

_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()

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

4

3 に答える 3

6

これはすべて、 550ページのAdobeFlex3プログラミングActionScript3PDF(第27章:Flash Playerのセキュリティ/クロススクリプト)で説明されています。

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

それは、図やすべてで、もう少し詳細に続きます。

于 2008-08-18T09:59:50.697 に答える
2

ロードしたファイルが含まれているサーバー上に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/から取得したコードサンプル

于 2008-08-18T10:03:36.630 に答える
0

おそらくSystem.Security.allowDomainが必要ですか?

于 2008-08-18T09:36:26.063 に答える