2009-07-06 84 views
2

我试图将Gravatars加载到Flash中。幸运的是,他们在http://en.gravatar.com/avatar/crossdomain.xmlFlash Crossdomain.xml问题

我的代码提供crossdomain.xml文件:

Security.loadPolicyFile("http://en.gravatar.com/avatar/crossdomain.xml"); 
var loader:Loader = new Loader(); 
loader.load(new URLRequest("http://en.gravatar.com/avatar/" + gravatar + "?s=35&d=identicon")); 

但我仍然收到此错误:

SecurityError: Error #2123: Security sandbox violation: LoaderInfo.content: [...] cannot access http://en.gravatar.com/avatar/97fbce86a5bbc520450168603172cd9e?s=35&d=identicon . No policy files granted access.
at flash.display::LoaderInfo/get content()
at PiecePlayerSmall/onLoadComplete()

我还监测流量的Flash文件是发送。它要求:

任何获得此建议工作并减少对gravatar.com的请求数量。

编辑: 下面的代码工作,这要归功于雅各

Security.loadPolicyFile("http://en.gravatar.com/avatar/crossdomain.xml"); 
var context:LoaderContext = new LoaderContext(); 
context.checkPolicyFile = true; 
context.applicationDomain = ApplicationDomain.currentDomain; 
var request:URLRequest = new URLRequest(
    "http://en.gravatar.com/avatar/" + gravatar + "?s=35&d=identicon"); 
var loader:Loader = new Loader(); 
loader.load(request, context); 
this.addChild(loader); 

注意:不要试图直接访问Event.COMPLETE

+0

如果我的请求URL不在我当前的域中,该怎么办? – 2010-01-21 20:15:52

+0

如果它不是您当前的域名,则表示您没有权限访问其资源。在这种情况下,您需要执行一些hack方法来内联修改crossdomain.xml。 – 2017-07-05 05:30:02

回答

7

我周围类似的问题得到了由内容使用LoaderContext。以下是如何执行此操作的示例:

var context:LoaderContext = new LoaderContext(); 
context.checkPolicyFile = true; 
context.securityDomain = SecurityDomain.currentDomain; 
context.applicationDomain = ApplicationDomain.currentDomain; 
var request:URLRequest = new URLRequest(
    "http://en.gravatar.com/avatar/" + gravatar + "?s=35&d=identicon"); 
var loader:Loader = new Loader(); 
loader.load(request, context);