我在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);
在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()
有没有办法让这段代码有效?
这些都在第550页的Adobe Flex 3编程ActionScript 3 PDF中进行了描述(第27章:Flash Player安全/跨脚本编写):
如果使用ActionScript 3.0编写的两个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文件的脚本权限.
它继续更详细,图表和所有.