I understand it's not a common configuration and I don't plan on deploying my modules like this. The reason I want a local Application SWF to load a remote module SWF is because I need to run my integration tests on my local machine. The tests run against the web application that serves the module SWFs. However, even though they are both on my machine, the Application SWF loads from the filesystem, whereas the modules are loaded from http://localhost.
So to recap, I've tried running with localTrusted, localWithNetworking. I have the most permissive crossdomain.xml on the server where the modules live. I've tried several different permutations of setting the ApplicationDomain. I've even tried setting the SecurityDomain as I said in my previous post though apparently a local SWF is just not allowed to do that. I did see something very briefly mentioned in the Adobe Flash Player docs about setting DisableLocalSecurity/EnableLocalSecurity API calls but I believe those are API calls of the player, not of the SDK and I haven't figured out how I could call those methods on the plugin in Firefox. Any other ideas? The Adobe docs really do indicate that this configuration is possible yet I have yet to see anywhere where someone has got this working. Am I chasing something that can't be done? Are the docs wrong (see my initial post in this thread)? --- In [email protected], Alex Harui <aha...@...> wrote: > > I was unclear you needed to load from different domains. I don't know how you would get your current configuration to work when deployed over HTTP unless the module and main swf were on the same domain, and in such a case, relative URLs would be better. > > I think you are caught in one of those scenarios I described. In order to use cross-domain modules, you need to set SecurityDomain.currentDomain and thus can only test when deployed over HTTP. For security reasons, cross-domain modules is not a common configuration. > > From: [email protected] [mailto:[email protected]] On Behalf Of hughesmatt78 > Sent: Monday, December 15, 2008 11:59 AM > To: [email protected] > Subject: [flexcoders] Re: Loading network SWFs from SWF hosted on filesystem (SWF is not a loadable module > > > How could I use relative URLs when I am purposely loading from a > different domain. Again, I need to run the Application SWF from the > filesystem and load the module from http://localhost (or some other > domain). > > As far as setting the SecurityDomain.currentDomain, I have tried doing > that, only to get this error: > > SecurityError: Error #2142: Security sandbox violation: local SWF > files cannot use the LoaderContext.securityDomain property. > file://localhost/Users/mhughes/work/ccad/workspace/AwesomeProject/bin-debug/AwesomeProject.swf<file:///\\localhost\Users\mhughes\work\ccad\workspace\AwesomeProject\bin-debug\AwesomeProject.swf> > was attempting to load http://localhost/SimpleModuleProject.swf. > at flash.display::Loader/_load() > at flash.display::Loader/load() > at > ModuleInfo/load()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\modules\ModuleManager.as:431] > at > ModuleInfoProxy/load()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\modules\ModuleManager.as:986] > > --- In [email protected]<mailto:flexcoders%40yahoogroups.com>, Alex Harui <aharui@> wrote: > > > > Typically, you want to test in local-trusted instead of > local-with-networking and use relative paths to all assets (and have > those assets in the local filesystem). Then when you deploy those > files to a server in the same folder configuration, everything should > just work. > > > > If you use an absolute path, then in local-trusted it is seen as a > foreign domain, and by default modules will not work unless you set > the SecurityDomain.currentDomain on the module loader. However, that > will still set up a different "topology of trust" than when you deploy > and the loading app is on the same server as the module. > > > > So, only use absolute paths if you'll always be loading the module > from a different domain. There might be issues using > SecurityDomain.currentDomain in local-trusted sandboxes. You can > sometimes get yourself into configurations that can only be tested > while deployed and served over http: > > > > From: [email protected]<mailto:flexcoders%40yahoogroups.com> [mailto:[email protected]<mailto:flexcoders%40yahoogroups.com>] > On Behalf Of hughesmatt78 > > Sent: Monday, December 15, 2008 7:33 AM > > To: [email protected]<mailto:flexcoders%40yahoogroups.com> > > Subject: [flexcoders] Re: Loading network SWFs from SWF hosted on > filesystem (SWF is not a loadable module > > > > > > My sandbox type is local-trusted. According to the Flash Security > > white paper, local-trusted has *at least* the priviledges of > > local-with-networking. > > > > "localWithNetwork: This SWF file is a local file and has not been > > trusted by the user, but it was > > published with a networking designation. This SWF may communicate with > > the Internet but may not > > read from local data sources. > > localTrusted: This SWF file is a local file and has been trusted by > > the user, using either the > > Settings Manager or a FlashPlayerTrust configuration file. This SWF > > file may both read from local > > data sources and communicate with the Internet. > > " > > > > I did change it to local-with-networking, but I get the same error: > > > > Finished loading crossdomain. > > <?xml version="1.0"?> > > <cross-domain-policy> > > <allow-access-from domain="*" /> > > </cross-domain-policy> > > > > [SWF] /SimpleModuleProject.swf - 574,981 bytes after decompression > > *** Security Sandbox Violation *** > > SecurityDomain > > > 'file://localhost/Users/mhughes/work/ccad/workspace/AwesomeProject/bin-debug/AwesomeProject.swf<file:///\\localhost\Users\mhughes\work\ccad\workspace\AwesomeProject\bin-debug\AwesomeProject.swf><file:///<file:///\\>\\localhost\Users\mhughes\work\ccad\workspace\AwesomeProject\bin-debug\AwesomeProject.swf>' > > tried to access incompatible context 'http://localhost/crossdomain.xml' > > *** Security Sandbox Violation *** > > SecurityDomain > > > 'file://localhost/Users/mhughes/work/ccad/workspace/AwesomeProject/bin-debug/AwesomeProject.swf<file:///\\localhost\Users\mhughes\work\ccad\workspace\AwesomeProject\bin-debug\AwesomeProject.swf><file:///<file:///\\>\\localhost\Users\mhughes\work\ccad\workspace\AwesomeProject\bin-debug\AwesomeProject.swf>' > > tried to access incompatible context 'http://localhost/crossdomain.xml' > > Failed to load module > > SWF is not a loadable module > > > > Any ideas? > > > > --- In > [email protected]<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com>, Alex > Harui <aharui@> wrote: > > > > > > Check your sandboxType. I'll bet it is local-trusted and not > > local-with-networking. > > > > > > From: > [email protected]<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com> > [mailto:[email protected]<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com>] > > On Behalf Of hughesmatt78 > > > Sent: Saturday, December 13, 2008 11:33 AM > > > To: [email protected]<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com> > > > Subject: [flexcoders] Loading network SWFs from SWF hosted on > > filesystem (SWF is not a loadable module > > > > > > > > > I'm trying so far in vain to load a module from a network domain from > > > a SWF that was loaded via the filesystem. Every time I try and load > > > the module, I get the following error: > > > > > > "SWF is not a loadable module." > > > > > > I have seen this same problem discussed elsewhere on FlexCoders and > > > other blogs but I am getting very conflicting views. Some people say > > > this kind of module loading is not supported > > > (http://www.nabble.com/Problems-using-Flex-modules-td15188446.html) > > > but the Adobe Flash Player 9 Security white paper clearly indicate it > > > is possible: > > > > > > "A SWF file may also call Security.allowDomain() with the wildcard > > > parameter "*" to allow any domain. > > > This is necessary to allow a local-with-networking SWF file to > > > cross-script a network SWF file." > > > > > > Anyway, off to the example project I created. Here are two very basic > > > mxmls. > > > > > > TestApplication.mxml -- (loaded via file system, this attempts to load > > > a simple module hosted at localhost) > > > <?xml version="1.0" encoding="utf-8"?> > > > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > > > layout="vertical" initialize="init()"> > > > <mx:Script> > > > <![CDATA[ > > > import mx.events.ModuleEvent; > > > private function init() : void > > > { > > > Security.allowDomain("localhost"); > > > > > > Security.loadPolicyFile("http://localhost/crossdomain.xml"); > > > > > > var loader:URLLoader = new URLLoader(); > > > loader.addEventListener(Event.COMPLETE, function(event > > > : Event) { > > > trace("Finished loading crossdomain."); > > > trace(loader.data); > > > }); > > > loader.load(new > > > URLRequest("http://localhost/crossdomain.xml")); > > > } > > > > > > private function erroredOut(event : ModuleEvent) : void > > > { > > > trace(event.errorText); > > > } > > > > > > private function loadIt() : void > > > { > > > loaderOfModules.url = "http://localhost/SimpleModule.swf"; > > > } > > > ]]> > > > </mx:Script> > > > > > > <mx:Button click="loadIt()" label="Load module from localhost" /> > > > > > > <!-- Sandbox type reads local-trusted --> > > > <mx:Text text="{Security.sandboxType}" /> > > > <mx:ModuleLoader id="loaderOfModules" width="100%" height="500" > > > error="erroredOut(event)" > > > applicationDomain="{ApplicationDomain.currentDomain}"/> > > > </mx:Application> > > > > > > SimpleModule.mxml (the module hosted at localhost) > > > <?xml version="1.0" encoding="utf-8"?> > > > <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" > > > initialize="Security.allowDomain('*')" > > > > <mx:Text text="Hi there" /> > > > </mx:Module> > > > > > > And the crossdomain.xml file hosted at localhost. (Although according > > > to some Adobe docs, this file is not even needed to do crossscripting, > > > only for loading data.) > > > <?xml version="1.0"?> > > > <cross-domain-policy> > > > <allow-access-from domain="*" /> > > > </cross-domain-policy> > > > > > > Note that I can get this example to work fine if I host the > > > Application SWF from one network domain and load the module from > > > another network domain without changing a thing. I only get the error > > > when the loading SWF is hosted on the filesystem. Also note that the > > > Application.swf is in a folder designated as locally trusted and I > > > confirm this by looking at the Security.sandboxType variable at > runtime. > > > > > > I am using Flex 3 and running this with Flash Player 9 debugger > version. > > > > > > So my questions are: > > > > > > * Is this scenario even supported? If not, what's with the > > > documentation I quoted from Adobe above? If yes, what am I missing? > > > * And do crossdomain.xml files even used when doing crossscripting? > > > Or are they just often conflated with module loading because you often > > > load modules and data from the same server? > > > > > >

