表示コンテンツの動的ロード

Flash Player 9 以降、Adobe AIR 1.0 以降

次の外部表示アセットを ActionScript 3.0 アプリケーションにロードできます。

  • ActionScript 3.0 でオーサリングされた SWF ファイル — Sprite、MovieClip、または Sprite を拡張する任意のクラスです。

  • イメージファイル — JPG、PNG、および GIF ファイルが含まれます。

  • AVM1 SWF ファイル — ActionScript 1.0 または 2.0 で記述された SWF ファイルです。

これらのアセットをロードするには、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(event:Event):void 
{ 
    container.addChild(pictLdr.content);  
}

ロードの進行状況の監視

ファイルがロードを開始すると、LoaderInfo オブジェクトが作成されます。 LoaderInfo オブジェクトは、ロードの進行状況、ロードする側およびロードされる側の URL、メディアの総バイト数、メディアの規格高さと幅などの情報を提供します。LoaderInfo オブジェクトは、ロードの進行状況を監視するためのイベントも送出します。

次の図は、LoaderInfo オブジェクトの各種使用方法を示します。LoaderInfo オブジェクトは、SWF ファイルのメインクラスのインスタンス、Loader オブジェクト、および Loader オブジェクトによってロードされたオブジェクトの場合でそれぞれ使用方法が異なります。

LoaderInfo オブジェクトは、Loader オブジェクトと、ロードされた表示オブジェクトの両方のプロパティとしてアクセスできます。 LoaderInfo オブジェクトは、ロードが開始されると同時に、Loader オブジェクトの contentLoaderInfo プロパティを介してアクセスできます。また、表示オブジェクトのロード完了後は、表示オブジェクトの loaderInfo プロパティを介してロードされた表示オブジェクトのプロパティとして LoaderInfo オブジェクトにアクセスすることができます。ロードされた表示オブジェクトの loaderInfo プロパティは、Loader オブジェクトの contentLoaderInfo プロパティと同じ LoaderInfo オブジェクトを参照します。つまり、LoaderInfo オブジェクトは、ロードされたオブジェクトファイルとロードした Loader オブジェクト間(ロードする側およびロードされる側の間)で共有されます。

ロードされたコンテンツのプロパティにアクセスするには、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; 
}

詳しくは、イベント処理を参照してください。

ロードコンテキストの指定

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 ファイルをロードする場合に便利です。 詳しくは、アプリケーションドメインの操作を参照してください。

次に示す例では、別のドメインからビットマップをロードするとき、ポリシーファイルをチェックします。

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 ファイルのクラスを 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);

詳しくは、『Adobe Flash Platform 用 ActionScript 3.0 リファレンスガイド』の LoaderContext クラスの項を参照してください。