Существует ли надежный метод обеспечения получения файлов политики междоменного доступа для всех серверов изображений Facebook? - PullRequest
3 голосов
/ 10 августа 2010

Я недавно начал собирать приложение Facebook Connect AS3 и извлекать объекты и изображения через API Graph.

При работе в любом месте, кроме локального, я получаю ошибки безопасности в виде:
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");
- тогда я подхожу для этого сервера, но, кажется, что существует любое количество доменов с форматом photos- [letter].Я добавил один для каждого в алфавите - который успешно извлекает файлы междоменных имен - но это не кажется хорошим решением и не учитывает какие-либо новые настройки хостинга. Facebook может реализовать вбудущее.

Одна вещь, которую я рассмотрел, это получение файла политики междомена для каждого изображения, захват домена из URL-адреса изображения перед выполнением запроса изображения.К сожалению, по крайней мере, с помощью решения Graph (а я не слишком внимательно смотрю на остальные), их серверы разрешают URL-адрес изображения после выполнения запроса из чего-то более общего, например:
ht_tps: //graph.facebook.com / [objectId] / picture? type = small & access_token = [accessToken]

Кто-нибудь нашел более надежный способ обеспечения возможности извлечения изображений без нарушений в изолированной программной среде безопасности?Или Facebook поддерживает полный список, за которым разработчики должны следить?

Спасибо!

Ответы [ 2 ]

7 голосов
/ 02 ноября 2012

Загрузите междоменные домены 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");

, а затем, когда вы захотите загрузить изображение из facebook, установите для флага checkPolicy значение true, используя LoaderContext загрузчика, как показано ниже;

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));
}
1 голос
/ 11 августа 2010

В идеале, я бы предположил, что вы хотите, чтобы Flash получал файл политики самостоятельно, а не вызывал его с помощью Security.loadPolicyFile.Вы пытались просто установить флаг checkPolicyFile для вашего загрузчика LoaderContext?

В качестве альтернативы, я считаю, что при использовании URLLoader вместо Loader Flash автоматически запросит файл политики, поэтомумог бы попробовать это также.Хитрость заключается в том, что если вы используете Loader, Flash позволит вам отображать то, что вы загрузили, даже без политики междоменного домена, поэтому он не загружает ее, если вы не сообщите об этом.Когда вы используете URLLoader, сама загрузка не разрешается, если нет файла политики, поэтому Flash получает его автоматически.

...