是否有可靠的方法确保为所有Facebook图像服务器检索跨域策略文件?

tho*_*den 3 facebook crossdomain.xml actionscript-3

我最近开始整理Facebook Connect AS3应用程序,并通过Graph API检索对象和图像.

在本地运行的任何地方,我收到以下形式的安全错误:
SecurityError:错误#2122:安全沙箱违规:Loader.content:xxxx无法访问http://photos-a.ak.fbcdn.net/xxxx.jpg 策略文件是必需的,但加载此媒体时未设置checkPolicyFile标志.

如果我添加一行表单:
Security.loadPolicyFile("ht_tp://photos-a.ak.fbcdn.net/crossdomain.xml");
- 然后我对该服务器很好,但似乎有任意数量的域有照片 - [letter]格式.我已经在字母表中添加了一个 - 它很高兴地成功地检索了跨域文件 - 但它似乎不是一个很好的解决方案,并且不适应Facebook 将来可能实现的任何新托管设置.

我考虑过的一件事是在每个图像的基础上检索跨域策略文件,在发出图像请求之前从图像URL捕获域.不幸的是,至少通过Graph解决方案(而且我没有仔细查看其他解决方案),他们的服务器在发出请求后解析图像URL,来自更通用的内容:
ht_tps://graph.facebook.com/ [OBJECTID] /照片?类型=&小的access_token = [的accessToken]

有没有人找到更可靠的方法来确保在没有安全沙箱违规的情况下检索图像?或者Facebook是否保留了开发人员需要关注的明确列表?

谢谢!

Gok*_*ank 7

将facebook跨域加载到应用程序的初始位置,如下所示;

Security.allowDomain("*");
Security.allowInsecureDomain("*");
Security.loadPolicyFile("http://graph.facebook.com/crossdomain.xml");
Security.loadPolicyFile("https://graph.facebook.com/crossdomain.xml");
Security.loadPolicyFile("http://profile.ak.fbcdn.net/crossdomain.xml");
Security.loadPolicyFile("https://profile.ak.fbcdn.net/crossdomain.xml");
Security.loadPolicyFile("http://profile.cc.fbcdn.net/crossdomain.xml");
Security.loadPolicyFile("https://profile.cc.fbcdn.net/crossdomain.xml");
Security.loadPolicyFile("http://fbcdn-profile-a.akamaihd.net/crossdomain.xml");
Security.loadPolicyFile("https://fbcdn-profile-a.akamaihd.net/crossdomain.xml");
Security.loadPolicyFile("http://fbcdn-sphotos-a.akamaihd.net/crossdomain.xml");
Security.loadPolicyFile("https://fbcdn-sphotos-a.akamaihd.net/crossdomain.xml");
Run Code Online (Sandbox Code Playgroud)

然后每当你想从facebook加载图像时,使用Loader的LoaderContext将checkPolicy标志设置为true,如下所示;

var context:LoaderContext = new LoaderContext();
context.applicationDomain = ApplicationDomain.currentDomain;
context.checkPolicyFile = true;

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadFacebookPhoto);
loader.load(new URLRequest(YOUR_FACEBOOK_PHOTO_URL),context);

private function onLoadFacebookPhoto(e:Event):void
{
    addChild(Bitmap(LoaderInfo(e.target).content));
}
Run Code Online (Sandbox Code Playgroud)