如何使用Flash(AS3)从远程域调用Flex SWF?

Era*_*mpf 2 apache-flex security flash actionscript-3

我在http://www.a.com/a.swf上有一个Flex swf .我在另一个尝试加载SWF的doamin上有一个flash代码:

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

在onLoaderFinish事件中,我尝试从远程SWF加载类并创建它们:

_loader.contentLoaderInfo.applicationDomain.getDefinition("someClassName") as Class
Run Code Online (Sandbox Code Playgroud)

当此代码运行时,我得到以下异常

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()
Run Code Online (Sandbox Code Playgroud)

有没有办法让这段代码有效?

The*_*heo 6

这些都在第550页的Adobe Flex 3编程ActionScript 3 PDF中进行了描述(第27章:Flash Player安全/跨脚本编写):

如果使用ActionScript 3.0编写的两个SWF文件是从不同的域提供的 - 例如http://siteA.com/swfA.swfhttp://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文件的脚本权限.

它继续更详细,图表和所有.