Как выполнить внешний SWF в Приложении Flex?

Править: Из-за ответа я изменяю отправленный код. Я добавил Security.allowDomain("*") строка и та строка бросают меня ошибка. Так, как это может быть сделано?

Я хочу запустить Приложение Сценария 3.0 Действия в Приложение Flex. Чтобы сделать это, я сделал следующее:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication windowComplete="loadSwfApplication()" xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[
            private function loadSwfApplication()
            {
                // The next line throws me an error.
                Security.allowDomain("*");

                var urlRequest:URLRequest = new URLRequest("path/to/the/application.swf");
                swfLoader.addEventListener(Event.COMPLETE, loadComplete);
                swfLoader.load(urlRequest);
            }

            private function loadComplete(completeEvent:Event)
            {
                var swfApplication:* = completeEvent.target.content;
                swfApplication.init();  // this is a Function that I made it in the Root class of swfApplication
            }
        ]]>
    </mx:Script>

    <mx:SWFLoader id="sfwLoader"/>

</mx:WindowedApplication>

Проблема состоит в том что в вызове swfApplication.init(); Плеер AIR бросает меня исключение:

Нарушение тестовой среды безопасности: вызывающая сторона file:///path/to/the/application.swf не может получить доступ к Этапу, принадлежавшему app:/SWFApplicationLoader.swf.

Это вызвано тем, что где-нибудь в application.swf Я использую этап как это:

if (root.stage != null)
    root.stage.addEventListener(Event.REMOVED, someFunction);
root.stage.stageFocusRect = false;

Как я могу загрузить это swf приложение и ИСПОЛЬЗОВАТЬ этап без каких-либо проблем?

5
задан Lucas Gabriel Sánchez 29 April 2010 в 19:38
поделиться

3 ответа

Вы можете попробовать загрузить свой SWF временно в ByteArray , а затем загрузить его с помощью SWFLoader .

Не забудьте установить для allowCodeImport значение true, поскольку ваш SWF-файл содержит код внутри.

Конечно, убедитесь, что загруженный swf-файл достаточно безопасен для вашего приложения, поскольку он будет иметь доступ ко всей вашей собственности.

private function loadSwfApplication():void {
  // load the file with URLLoader into a bytearray
  var loader:URLLoader=new URLLoader();

  // binary format since it a SWF
  loader.dataFormat=URLLoaderDataFormat.BINARY;
  loader.addEventListener(Event.COMPLETE, onSWFLoaded);

  //load the file
  loader.load(new URLRequest("path/to/the/application.swf"));
}
private function onSWFLoaded(e:Event):void {
 // remove the event
 var loader:URLLoader=URLLoader(e.target);
 loader.removeEventListener(Event.COMPLETE, onSWFLoaded);

 // add an Application context and allow bytecode execution 
 var context:LoaderContext=new LoaderContext();
 context.allowCodeImport=true;

 // set the new context on SWFLoader
 sfwLoader.loaderContext = context;

 sfwLoader.addEventListener(Event.COMPLETE, loadComplete);

 // load the data from the bytearray
 sfwLoader.load(loader.data);
}

// your load complete function
private function loadComplete(completeEvent:Event):void {
 var swfApplication:* = completeEvent.target.content;
 swfApplication.init();  // this is a Function that I made it in the Root 
                         // class of swfApplication
}
18
ответ дан 18 December 2019 в 07:53
поделиться

Если они загружаются из разных доменов, вам придется добавить исключение безопасности - http://livedocs.adobe.com/flex/3/html/help.html?content=05B_Security_08.html

если он запускается локально, вам, вероятно, придется добавить их в список доверенных файлов или папок в диспетчере настроек - http://www.macromedia.com/support/documentation/en/flashplayer/ help / settings_manager04.html # 117502

2
ответ дан 18 December 2019 в 07:53
поделиться

Предполагая, что внешний SWF-файл также находится в каталоге приложения, вы можете попробовать загрузить его, используя схему app: / :

var urlRequest:URLRequest = new URLRequest("app:/path/application.swf");

Это может поместить его в тот же контекст безопасности, что и основное приложение.

1
ответ дан 18 December 2019 в 07:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: