So, the trick to have an adobe AIR trusted remote multi-versioned application 
is as shown in this sample code:
<?xml version="1.0" encoding="utf-8"?><s:WindowedApplication 
xmlns:fx="http://ns.adobe.com/mxml/2009";                                      
xmlns:s="library://ns.adobe.com/flex/spark"                                     
preinitialize="preinitializeHandler(event)" showStatusBar="false">
        <fx:Script>             <![CDATA[                       import 
mx.events.FlexEvent;
                        // Get the raw swf                      private 
function launchChildApp():void {                                
trace("applicationDirectory: " + File.applicationDirectory.nativePath);         
                trace("applicationStorageDirectory: " + 
File.applicationStorageDirectory.nativePath);
                                const urlRequest:URLRequest = new 
URLRequest("http://yourDomain/yourApplication/youRemoteTrustedMultiVerionedAirWindowedApplication.swf";);
                              const urlLoader:URLLoader = new URLLoader();      
                      urlLoader.dataFormat = URLLoaderDataFormat.BINARY;        
                      urlLoader.addEventListener(Event.COMPLETE, 
urlLoader_completeHandler);                          
urlLoader.load(urlRequest);                     }
                        private function 
preinitializeHandler(event:FlexEvent):void {                maximize();         
                       launchChildApp();                       }
                        private function 
urlLoader_completeHandler(event:Event):void {
                                const urlLoader:URLLoader = event.currentTarget 
as URLLoader;
                                // In isolation because the loaded code may be 
compile with another flex version.                               const 
applicationDomain:ApplicationDomain = new ApplicationDomain(null);
                                const lc:LoaderContext = new 
LoaderContext(false, applicationDomain);                           
lc.allowCodeImport = true;
                                swfLoader.loaderContext = lc;                   
        swfLoader.load(urlLoader.data as ByteArray);                    }       
        ]]>     </fx:Script>
        <s:SWFLoader id="swfLoader" autoLoad="false" trustContent="true" 
loadForCompatibility="true"                             showBusyCursor="true" 
scaleContent="false"/>
</s:WindowedApplication>

Frédéric THOMAS

> From: [email protected]
> To: [email protected]
> Subject: RE: [AIR - loadForCompatibility]
> Date: Wed, 24 Sep 2014 13:29:15 +0100
> 
> 
> 
> 
> My bad, I had to add the listener to LoaderInfo instead of Loader, use a 
> child applicationDomain instead of a sibling one and instanciate from the 
> applicationDomain definitions my App before using it.
> 
> Still exploring...
> 
> Frédéric THOMAS
> 
> > From: [email protected]
> > To: [email protected]
> > Subject: RE: [AIR - loadForCompatibility]
> > Date: Wed, 24 Sep 2014 11:37:46 +0100
> > 
> > Hi Alex,
> > So, I gave a try but I'm facing something weird, comment in code:
> > The Loader:<?xml version="1.0" encoding="utf-8"?>
> > <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"; 
> > xmlns:s="library://ns.adobe.com/flex/spark">
> > 
> >    <s:layout>
> >       <s:VerticalLayout/>
> >    </s:layout>
> > 
> >    <fx:Script>
> >       <![CDATA[
> >         import mx.core.IVisualElement;
> > 
> >         // Get the raw swf
> >         private function launchChildApp():void {
> >             const urlRequest:URLRequest = new 
> > URLRequest("http://localhost:8080/mobilityworkspace/App.swf";);
> >             const urlLoader:URLLoader = new URLLoader();
> >             urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
> >             urlLoader.addEventListener(Event.COMPLETE, 
> > urlLoader_completeHandler);
> >             urlLoader.load(urlRequest);
> >         }
> > 
> >         // load the raw swf into the same security context and sibling 
> > application domain
> >         private function urlLoader_completeHandler(event:Event):void {
> >             const urlLoader:URLLoader = event.currentTarget as URLLoader;
> > 
> >             // In isolation because the loaded code may be compile with 
> > another flex version.
> >             const applicationDomain:ApplicationDomain = new 
> > ApplicationDomain(null);
> > 
> >             const lc:LoaderContext = new LoaderContext(false, 
> > applicationDomain);
> >             lc.allowCodeImport = true;
> > 
> >             // Throws [Fault] exception, information=Error: addChild() is 
> > not available in this class.
> >             // Instead, use addElement() or modify the skin, if you have 
> > one.
> >             //lc.requestedContentParent = panel;
> > 
> >             const ldr:Loader = new Loader();
> > 
> >             // So wait for the COMPLETE Event to affect it to the panel but
> >             // the Event is never fired (and even no other events, errors).
> >             ldr.addEventListener(Event.COMPLETE, ldr_completeHandler);
> >             ldr.loadBytes(urlLoader.data as ByteArray, lc);
> >         }
> > 
> >         // Never goes here.
> >         private function ldr_completeHandler(event:Event):void {
> >             const ldr:Loader = event.currentTarget as Loader;
> >             panel.addElement(ldr.content as IVisualElement);
> >         }
> >         ]]>
> >    </fx:Script>
> > 
> > 
> >    <s:Button label="Launch child application" click="launchChildApp()"/>
> > 
> >    <s:Panel id="panel" width="100%" height="100%"/>
> > 
> > </s:WindowedApplication>
> > 
> > The App:<?xml version="1.0"?>
> > <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009";
> >                   xmlns:s="library://ns.adobe.com/flex/spark">
> >    <fx:Script>
> >       <![CDATA[
> >         import mx.controls.Alert;
> >         ]]>
> >    </fx:Script>
> >    <s:Button click="Alert.show('Hello, world')" label="Say Hello"/>
> > </s:Group>
> > 
> > Do you know why I can't reach ldr_completeHandler ?Frédéric THOMAS
> > 
> > > From: [email protected]
> > > To: [email protected]
> > > Subject: RE: [AIR - loadForCompatibility]
> > > Date: Tue, 23 Sep 2014 22:20:35 +0100
> > > 
> > > Alight, thank you Alex
> > > 
> > > Frédéric THOMAS
> > > 
> > > > From: [email protected]
> > > > To: [email protected]
> > > > Subject: Re: [AIR - loadForCompatibility]
> > > > Date: Tue, 23 Sep 2014 21:03:39 +0000
> > > > 
> > > > 
> > > > 
> > > > On 9/23/14 1:56 PM, "Frédéric THOMAS" <[email protected]> wrote:
> > > > 
> > > > >> Essentially, this trick makes remote content local.  It can make 
> > > > >> remote
> > > > >> calls, but the headers will be the same as if you coded URLLoader in 
> > > > >> the
> > > > >> main AIR app not as if it was a web-app served by the domain's 
> > > > >> server.
> > > > >
> > > > >If it means the loaded swf is perceived as or is in the local 
> > > > >application
> > > > >sandbox / security context, I guess it can do the trick moving the rest
> > > > >of the code in a module downloaded by the loaded swf, thought ?
> > > > AIUI, you can keep "importing" swfs into the application sandbox, but 
> > > > the
> > > > servers that they came from will not see the same headers as if it was a
> > > > web app from that server and will respond differently, often by 
> > > > returning
> > > > failure.
> > > > 
> > > > If you download remote.swf and load bytes it, and it just uses Loader to
> > > > run anotherremote.swf, anotherremote.swf is loaded into a sandbox and
> > > > cannot access the remote.swf.  Remote.swf would also have to use the 
> > > > load
> > > > bytes trick in order for anotherremote.swf to talk directly to each 
> > > > other.
> > > > 
> > > > -Alex
> > > > 
> > >                                     
> >                                       
> 
>                                         
                                          

Reply via email to