Hi Alex, 
It works perfectly, remote calls and all the AIR APIs, my app loader is in the 
last version of the SDK / AIR, it loads the old AIR project SDK 4.6 which in 
turn loads modules, the goal was to be able to raise the SDK and libs versions 
avoiding re-installing the application on devices where the users haven't got 
the admin rights, so, from now, they will do the install of the loader once 
which in turn will check if there is an updated version of the main app on the 
server and download it as needed.
Next step is to do with RSLs from the main app to make the app and modules 
lighter.
Thanks for having given me the clue.

Frédéric THOMAS

> From: [email protected]
> To: [email protected]
> Subject: Re: [AIR - loadForCompatibility]
> Date: Thu, 25 Sep 2014 16:25:56 +0000
> 
> Makes sense.   Thanks for sharing.
> 
> Was the remote SWF able to make "secure" calls to the server?  I was told
> that in some web-apps, the servers check the headers to see if the request
> came from a client served from the same domain and that whatever header
> that is will not be "yourDomain" when the SWF is loaded in this way.
> 
> -Alex
> 
> On 9/25/14 8:34 AM, "Frédéric THOMAS" <[email protected]> wrote:
> 
> >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("applicationStorageDirecto
> >ry: " + File.applicationStorageDirectory.nativePath);
> >                             const urlRequest:URLRequest = new
> >URLRequest("http://yourDomain/yourApplication/youRemoteTrustedMultiVerione
> >dAirWindowedApplication.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