URLLoaderでロード

URLLoaderクラスとはリファレンスにあるとおり外部リソースをロードするために使用します。

URLLoader クラスは、指定した URL からテキスト、バイナリデータ、または URL エンコード形式の変数をダウンロードする際に使用します。動的なデータ駆動アプリケーションで使用するテキストファイル、XML、その他の情報をダウンロードする場合に便利です。 ActionScript 3.0 言語およびコンポーネントリファレンス

URLLoaderインスタンスのloadメソッドでロードしたデータは、データのロードと見なされるため、外部リソースのドメインと元となるswfのドメインが異なる場合にはポリシーファイルの設定に注意しましょう。

ロードするデータ形式の指定

URLLoaderインスタンスにはdataFormatというプロパティがあります。

dataFormat : String = "text" ダウンロードしたデータがテキスト(URLLoaderDataFormat.TEXT)生のバイナリデータ(URLLoaderDataFormat.BINARY)、または URL エンコードされた変数(URLLoaderDataFormat.VARIABLES)のいずれであるかを制御します。 ActionScript 3.0 言語およびコンポーネントリファレンス

つまり、downloadされた値をどういった形式で扱うのかを指定するプロパティです。

サンプルコード

package
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;
    import flash.net.URLVariables;
    import flash.utils.ByteArray;

    /**
     * URLLoaderでバイナリデータを取得する例
     * @author naoto koshikawa
     */
    public class URLLoaderSample extends Sprite
    {
        //----------------------------------------------------------------------
        //  methods
        //----------------------------------------------------------------------
        //------------------------------
        //  public methods
        //------------------------------
        /**
         * constructor
         */
        public function URLLoaderSample()
        {
            var urlLoader:URLLoader = new URLLoader();
            urlLoader.addEventListener(Event.COMPLETE, urlLoader_completeHandler);
            urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
            urlLoader.load(new URLRequest("http://asmple.com/work/avatar1.swf"));
        }

        private function urlLoader_completeHandler(event:Event):void
        {
            var urlLoader:URLLoader = URLLoader(event.target);
            switch (urlLoader.dataFormat) {
            case URLLoaderDataFormat.TEXT:
            {
                var str:String = urlLoader.data as String;
                // strを使った処理
                break;
            }
            case URLLoaderDataFormat.BINARY:
            {
                var byte:ByteArray = urlLoader.data as ByteArray;
                var loader:Loader = new Loader();
                loader.loadBytes(byte);
                addChild(loader); // などloaderを使った処理
                break;
            }
            case URLLoaderDataFormat.VARIABLES:
            {
                var variables:URLVariables = urlLoader.data as URLVariables;
                // variablesを使った処理
                break;
            }
        }

        }
    }
}

以上のように、URLLoader.dataの値を各オブジェクトへ変換することが出来ます。 このようにURLLoaderを用いて取得した値を扱う場合、適切なdataFormatを設定しておく必要があります。dataFormatで指定した値と実際受け取った値の形式が異なる場合、以下の処理で例外が発生します。

var str:String = urlLoader.data as String;
var byte:ByteArray = urlLoader.data as ByteArray;
var variables:URLVariables = urlLoader.data as URLVariables;

downloadされた値を扱う場合には、URLLoader.dataFormatを適切に設定する必要があるので注意しましょう。