我有一个Flex swf在托管 http://www.a.com/a.swf.我有个闪码在另一个doamin,试图载的SWF:

_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 Flex3程ActionScript3PDF 在550页(第27章:Flash Player安全/跨脚本):

如果两个SWF写的文件与ActionScript3.0是服从不同的领域,例如, http://siteA.com/swfA.swfhttp://siteB.com/swfB.swf—那么,默认情况下,Flash Player不允许swfA.swf到脚本swfB.swf,也不swfB.swf到脚本swfA.swf。SWF文件给予许可SWF文件,从其他领域通过调用的安全性。allowDomain().通过调用的安全性。allowDomain("siteA.com"),swfB.swf给SWF文件siteA.com 许可脚本。

它继续在某些更详细的说明,与图表和所有。

其他提示

你需要一个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 );

代码样本yoinked从 http://blog.log2e.com/2008/08/15/when-a-cross-domain-policy-file-is-not-enough/

Mayhaps 系统。安全。allowDomain 是你需要什么?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top