Ошибка «Нет активного контекста безопасности», даже с трюком setTimeout? - PullRequest
0 голосов
/ 26 мая 2011

У меня есть этот код, который должен извлечь миниатюрное изображение с удаленного сервера и вернуть его для отображения во 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.

Ответы [ 3 ]

2 голосов
/ 26 мая 2011

Если я правильно помню (политики безопасности - это немного непросто во Flash), класс Loader не проверяет файл политики CrossDomain при загрузке изображений. Вы можете сделать это, передав свой экземпляр LoaderContext в loader.load(), например:

loader.load(urlRequest, new LoaderContext(true));

Не думаю, что вам нужно использовать setTimeout в вашем коде; Я не слышал об этой практике и не уверен, чего она достигнет (кроме задержки вызова загрузки на 1 мс:)

1 голос
/ 29 июня 2011

Я больше не могу найти ссылку, но была ошибка в версии 10.2 Flash с отладкой. Я недавно обновил до версии 10.3 с помощью отладчика, и я больше не получаю эту ошибку.

1 голос
/ 26 мая 2011

Это может быть так же просто, как загрузить междоменную политику с веб-сайта, с которого вы извлекаете эскизы.

Security.allowDomain("*");
Security.allowInsecureDomain("*");
Security.loadPolicyFile("http://domain.com/crossdomain.xml");
...