Вот решение, которое, кажется, работает.
Если вы используете URLLoader
для чтения данных с одного из доменов, в котором есть файл crossdomain.xml, и вы вызываете loadPolicyFile
для предварительной загрузки файла crossdomain.xml, есть вероятность, что загрузка не удастся, либо из-за проблем с сетевым подключением или из-за сбоя сервера, или из-за солнечных вспышек. Когда вы устанавливаете URLLoader
, вы можете добавить прослушиватель событий для SecurityErrorEvent.SECURITY_ERROR
. В четном слушателе вы можете попробовать загрузить файл политики снова. Файлы политики кэшируются, даже если они не загружаются (спасибо Adobe), поэтому вам придется добавить параметр запроса очистки кэша.
Вот простой пример того, как это будет работать:
public function loadMyFriends():void {
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(
SecurityErrorEvent.SECURITY_ERROR, handleSecurityError);
urlLoader.load(new URLRequest('https://graph.facebook.com/me/friends'));
}
private function handleSecurityError(event:Event):void {
Security.loadPolicyFile(
"https://graph.facebook.com/crossdomain.xml?__cb"=Math.random());
loadMyFriends();
}
На практике вы, возможно, захотите ограничить количество повторных попыток и, возможно, сделать экспоненциальный откат, если это действительно проблема с сетевым подключением, а не просто мертвый сервер, который неправильно обрабатывается балансировщиком нагрузки.