2010-08-10 3 views
3

Недавно я начал собирать приложение Facebook Connect AS3 и извлекать объекты и изображения через Graph API.Есть ли надежный метод обеспечения файлов политики crossdomain, которые были получены для всех серверов изображений Facebook?

Запуск в любом месте, но локально, я получаю ошибки безопасности формы:
SecurityError: Error # 2122: Нарушение изолированной среды безопасности: Loader.content: хххй не может получить доступ к http://photos-a.ak.fbcdn.net/xxxx.jpg требуется Файл политики, но флаг checkPolicyFile не был когда этот носитель загружен.

Если добавить строку вида:
Security.loadPolicyFile ("ht_tp: //photos-a.ak.fbcdn.net/crossdomain.xml");
-если я отлично отношусь к этому серверу, но кажется, что существует количество доменов с форматом photos- [letter]. Я добавил один для каждого в алфавите, который с радостью извлекает файлы crossdomain успешно - но это не похоже на приятное решение и не вмещает никаких новых настроек хостинга Facebook может будет реализовываться в будущем.

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

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

Спасибо!

ответ

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"); 

, а затем, когда вы хотите загрузить изображение из Facebook, установите флаг checkPolicy истину с помощью загрузчика 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

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

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

Смежные вопросы