Search code examples
htmlactionscript-3flashflash-cs6

Forcing SWF to load file in local driver of server before sending over browser


I am building a flash application which requires loading of an xml file using URLLoader. While developing application in my local machine with flash professional I can easily load it by

        private var myLoader:URLLoader = new URLLoader(new URLRequest("./com/assets/config.xml"));

When I publish the application and click on the html generated and the app loads on browser perfectly.

If I make a server (localhost:1111) that delivers the html file over browser on connect, the html file doesn't load the application (.swf).

While trying to debug it, I found that if I change the myLoader variable as below, the html file loads the swf properly.

    private var myLoader:URLLoader = new URLLoader(new URLRequest("http://localhost:1111/com/assets/config.xml"));

I believe the SWF is making another GET request after the html loads on my browser, that is the reason the SWF doesn't work without the change.

Is there any way I can load the xml file in SWF before it gets delivered over browser. This is to avoid another call to the server. I appreciate any help in clarifying my understanding and suggestion for workaround.


Solution

  • If you want to upload your SWF and have users access the configuration XML, you will need to host the XML somewhere reachable by your users. Your local machine (localhost:1111) is not reachable by anyone other than yourself (outside of some unusual hosts tweaking on the user's machine).

    When you set up hosting and a web-server to actually serve the file over HTTP, you will need to do a few things:

    1. Set up a crossdomain file on the server to define which hosts are allowed to load your configuration XML.
    2. Amend your application to load data from the server, e.g. new URLRequest('http://your_domain_or_ip/config.xml').

    The reason you cannot retain your reference to the XML file as a relative ./com/assets/config.xml is because the SWF will only load files over the local filesystem if it is being viewed as a file in the filesystem vs inside a browser.

    When the SWF runs, the URLLoader instance you create will perform a HTTP GET to load your XML file.

    If you want to avoid performing additional GET requests to fetch the XML, you will have to compile the configuration into the SWF itself using the [Embed] meta tag.