У меня есть этот код, который должен извлечь миниатюрное изображение с удаленного сервера и вернуть его для отображения во Flex. К сожалению, мой код выдает ошибки «Нет активного контекста безопасности».
После поиска я увидел трюк с setTimeout, который должен это исправить, но он не работает для меня. Что я делаю не так?
Вот код в Flex 4.0 (Примечание. Файл - это пользовательский класс)
public function getThumbnail(file:File, callBack:Function):void
{
// only for image files
if (file.mimeType.indexOf("image") > -1) {
var loader:Loader = new Loader();
// create request
var urlVars:URLVariables = new URLVariables();
urlVars.id = file.id;
var req:URLRequest = new URLRequest(THUMBNAIL_URL);
req.data = urlVars;
setTimeout(
function():void {
loader.load(req);
}, 1);
// set load handler
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,
function(event:Event):void
{
var thumbnail:Image = new Image();
thumbnail.source = event.currentTarget.content;
callBack(thumbnail);
});
}
}
Обновление Я разместил это в моем application.mxml
Security.allowDomain("*");
Security.allowInsecureDomain("*");
Security.loadPolicyFile("http://localhost:8080/crossdomain.xml");
И я изменил код в файле скрипта действия на
public function getThumbnail(file:File, callBack:Function):void
{
// only for image files
if (file.mimeType.indexOf("image") > -1) {
var loader:Loader = new Loader();
// create request
var urlVars:URLVariables = new URLVariables();
urlVars.id = file.id;
var req:URLRequest = new URLRequest(THUMBNAIL_URL);
req.data = urlVars;
var context:LoaderContext = new LoaderContext(true);
loader.load(req);
// set load handler
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,
function(event:Event):void
{
var thumbnail:Image = new Image();
thumbnail.source = event.currentTarget.content;
callBack(thumbnail);
});
}
}
Мне пришлось изменить файл server.xml на моем бэкэнде J2EE, чтобы файл crossdomain.xml отображался в корне.
Мой файл crossdomain.xml выглядит так:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<!--This domain can accept the SOAPAction header from a SWF file from www.example.com -->
<site-control permitted-cross-domain-policies="all" />
<allow-access-from domain="*" secure="false" />
<allow-http-request-headers-from
domain="*" headers="SOAPAction" />
</cross-domain-policy>
Я все еще получаю сообщение об ошибке «Нет активного контекста безопасности» в Firefox с отладочной версией Flash Player.