| ActionScript 3.0 のプログラミング > ActionScript プログラミングの概要 > 表示のプログラミング > コア表示クラスを操作するための基礎 > コンテンツの動的ロード | |||
次の外部表示アセットを ActionScript 3.0 アプリケーションにロードできます。
これらのアセットをロードするには、Loader クラスを使用します。
Loader オブジェクトを使用して、アプリケーションに SWF ファイルおよびグラフィックファイルをロードします。Loader クラスは、DisplayObjectContainer クラスのサブクラスです。Loader オブジェクトには、表示リスト内の子表示オブジェクト、つまりロードされる SWF ファイルまたはグラフィックファイルを表す表示オブジェクトを 1 つだけ含むことができます。表示リストに Loader オブジェクトを追加するときは、次のコードのように、子表示オブジェクトのロードが完了したら、ロードされた子表示オブジェクトも表示リストに追加します。
var pictLdr:Loader = new Loader();var pictURL:String = "banana.jpg"var pictURLReq:URLRequest = new URLRequest(pictURL);pictLdr.load(pictURLReq);this.addChild(pictLdr);
SWF ファイルまたはイメージがロードされると、ロードされた表示オブジェクトを、この例の container DisplayObjectContainer オブジェクトなどの別の表示オブジェクトコンテナに移動できます。
import flash.display.*;import flash.net.URLRequest;import flash.events.Event;var container:Sprite = new Sprite();addChild(container);var pictLdr:Loader = new Loader();var pictURL:String = "banana.jpg"var pictURLReq:URLRequest = new URLRequest(pictURL);pictLdr.load(pictURLReq);pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);function imgLoaded(e:Event):void { container.addChild(pictLdr.content); }
ファイルがロードされると、LoaderInfo オブジェクトが作成されます。このオブジェクトは、Loader オブジェクトおよびロードされた表示オブジェクト両方のプロパティです。つまり、LoaderInfo オブジェクトは、Loader オブジェクトの contentLoaderInfo プロパティ経由の Loader オブジェクトのプロパティであり、表示オブジェクトの loaderInfo プロパティでロードされた表示オブジェクトのプロパティです。ロードされた表示オブジェクトの loaderInfo プロパティは、Loader オブジェクトの contentLoaderInfo プロパティと同じ LoaderInfo オブジェクトを参照します。つまり、LoaderInfo オブジェクトは、ロードされたオブジェクトとロードした Loader オブジェクト間 (ロードされる側とロードする側) で共有されます。
LoaderInfo クラスは、ロードの進行状況、ロードする側とロードされる側の URL、メディアの総バイト数、メディアの規格高さと幅などの情報を提供します。LoaderInfo オブジェクトは、ロードの進行状況を監視するためのイベントも送出します。
ロードされたコンテンツのプロパティにアクセスするには、次のコードのように、LoaderInfo オブジェクトにイベントリスナーを追加します。
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
var ldr:Loader = new Loader();
var urlReq:URLRequest = new URLRequest("Circle.swf");
ldr.load(urlReq);
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
addChild(ldr);
function loaded(event:Event):void
{
var content:Sprite = event.target.content;
content.scaleX = 2;
}
詳細については、「イベントの処理」を参照してください。
次の図は、LoaderInfo オブジェクトのさまざまな使用方法を示しています。このオブジェクトは、SWF ファイルのメインクラスのインスタンスや Loader オブジェクトに使用されるほか、Loader オブジェクトによってロードされたオブジェクトにも使用されます。
Loader クラスの load() または loadBytes() メソッドを使用して Flash Player に外部ファイルをロードする場合、context パラメータを指定することもできます。このパラメータは LoaderContext オブジェクトです。
LoaderContext クラスには、ロードされたコンテンツの使用方法のコンテキストを定義できる次の 3 つのプロパティが含まれています。
checkPolicyFile--SWF ファイルではなく、イメージファイルをロードする場合にのみ、このプロパティを使用します。このプロパティを true に設定すると、Loader によってオリジンサーバーでクロスドメインポリシーファイルの有無がチェックされます (Web サイトの管理 (クロスドメインポリシーファイル)参照)。これは、Loader オブジェクトを含む SWF ファイルのドメイン以外のドメインにあるコンテンツにのみ必要です。サーバーから Loader ドメインにアクセス許可が与えられている場合、Loader ドメイン内の SWF ファイルの ActionScript はロードされたイメージ内のデータにアクセスできます。つまり、BitmapData.draw() コマンドを使用して、ロードされたイメージ内のデータにアクセスできます。 Loader オブジェクトのドメイン以外の他のドメインにある SWF ファイルは、Security.allowDomain() を呼び出して特定のドメインを許可できます。
securityDomain--イメージではなく、SWF ファイルをロードする場合にのみ、このプロパティを使用します。Loader オブジェクトを含むファイルのドメイン以外のドメインの SWF ファイルに対してこのプロパティを指定します。このオプションを指定すると、Flash Player はクロスドメインポリシーファイルが存在するかどうかをチェックします。ファイルが存在する場合は、クロスドメインポリシーファイルで許可されているドメインの SWF ファイルはロードされた SWF コンテンツをクロススクリプトできます。このパラメータとして flash.system.SecurityDomain.currentDomain を指定できます。 applicationDomain--ActionScript 1.0 または 2.0 で記述されたイメージまたは SWF ファイルではなく、ActionScript 3.0 で記述された SWF ファイルをロードする場合にのみ、このプロパティを使用します。ファイルをロードするとき、applicationDomain パラメータを flash.system.ApplicationDomain.currentDomain に設定することで、ファイルが Loader オブジェクトと同じアプリケーションドメインに含まれるように指定できます。ロードされた SWF ファイルを同じアプリケーションドメインに置くと、そのクラスに直接アクセスできます。これは、関連付けられたクラス名を使用してアクセスできる埋め込みメディアを含む SWF ファイルをロードする場合に便利です。詳細については、ApplicationDomain クラスを参照してください。次に、別のドメインからビットマップをロードするときに、クロスドメインポリシーファイルの有無をチェックする例を示します。
var context:LoaderContext = new LoaderContext();
context.checkPolicyFile = true;
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/photo11.jpg");
var ldr:Loader = new Loader();
ldr.load(urlReq, context);
次に、SWF ファイルを Loader オブジェクトと同じセキュリティサンドボックスに置くために、
別のドメインから SWF ファイルをロードするときに、クロスドメインポリシーファイルの有無をチェックする例を示します。また、このコードは、ロードされた SWF ファイルのクラスを Loader オブジェクトと同じアプリケーションドメインに追加します。
var context:LoaderContext = new LoaderContext();
context.securityDomain = SecurityDomain.currentDomain;
context.applicationDomain = ApplicationDomain.currentDomain;
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/library.swf");
var ldr:Loader = new Loader();
ldr.load(urlReq, context);
詳細については、『ActionScript 3.0 リファレンスガイド』の LoaderContext クラスの説明を参照してください。
Flex 2.01