Проблемы с Flash Crossdomain.xml

Пытаюсь загрузить Gravatars во Flash. К счастью, они предоставили файл crossdomain.xml по адресу http://en.gravatar.com/avatar/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: Ошибка № 2123: нарушение изолированной программной среды безопасности: LoaderInfo.content: [...] не удается получить доступ к http://en.gravatar.com/avatar/97fbce86a5bbc520450168603172cd9e?s=35&d=identicon. Доступ к файлам политик не предоставлен.
в flash.display :: LoaderInfo / get content ()
в 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.


person St. John Johnson    schedule 06.07.2009    source источник
comment
что, если URL-адрес моего запроса не находится в моем текущем домене?   -  person Fahim Akhter    schedule 21.01.2010
comment
Если это не ваш текущий домен, это означает, что у вас нет разрешения на доступ к их ресурсам. В этом случае вам нужно использовать некоторые методы взлома для встроенного изменения crossdomain.xml.   -  person Hao Nguyen    schedule 05.07.2017


Ответы (1)


Я решил аналогичную проблему, используя 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);
person Jacob    schedule 07.07.2009
comment
Только что попробовал, новая ошибка: Error # 2044: Unhandled SecurityErrorEvent :. text = Ошибка # 2048: нарушение безопасной изолированной программной среды: [...] не удается загрузить данные из en.gravatar.com/avatar/. - person St. John Johnson; 07.07.2009
comment
Хорошо, это решило мою проблему! Не добавляйте SecurityDomain, это только усугубит ситуацию. Кроме того, вы не можете напрямую получить доступ к содержимому загрузчика, что вызывает еще одну ошибку. - person St. John Johnson; 07.07.2009
comment
@John, как тогда получить доступ к контенту? - person cregox; 27.06.2011