> Was the remote SWF able to make "secure" calls to the server? Remote calls yes, but we're not in https, so, I can't say.
Frédéric THOMAS > From: [email protected] > To: [email protected] > Subject: RE: [AIR - loadForCompatibility] > Date: Fri, 26 Sep 2014 08:43:01 +0100 > > 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 > > >> > > > > > >> > > > > >> > > > >> > > >> > > > > > >
