Adobe Flex 3 ヘルプ

コンテンツのロード

SWF ファイルでは、次のタイプのコンテンツをロードできます。

  • SWF ファイル
  • イメージ
  • サウンド
  • ビデオ

サブトピック



SWF ファイルとイメージのロード

SWF ファイルおよびイメージ(JPG、GIF、または PNG ファイル)をロードするには、Loader クラスを使用します。local-with-filesystem サンドボックス以外にある SWF ファイルは、任意のネットワークドメインから SWF ファイルおよびイメージをロードできます。ローカルサンドボックス内にある SWF ファイルだけが、SWF ファイルとイメージをローカルファイルシステムからロードできます。しかし、local-with-networking サンドボックス内のファイルは、local-trusted サンドボックスまたは local-with-networking サンドボックス内のローカル SWF ファイルしかロードできません。local-with-networking サンドボックス内の SWF ファイルは、SWF ファイル以外のローカルコンテンツ(イメージなど)をロードしますが、ロードしたコンテンツの中のデータにはアクセスできません。

信頼できないソース(Loader オブジェクトのルート SWF ファイルのドメイン以外のドメインなど)から SWF ファイルをロードするとき、次のコードに示すように、Loader オブジェクトのマスクを定義して、ロードされたコンテンツ(Loader オブジェクトの子)がそのマスクの外部にあるステージの一部分に描画されないようにすることができます。

import flash.display.*;
import flash.net.URLRequest;
var rect:Shape = new Shape();
rect.graphics.beginFill(0xFFFFFF);
rect.graphics.drawRect(0, 0, 100, 100);
addChild(rect);
var ldr:Loader = new Loader();
ldr.mask = rect;
var url:String = "http://www.unknown.example.com/content.swf";
var urlReq:URLRequest = new URLRequest(url);
ldr.load(urlReq);
addChild(ldr);

Loader オブジェクトの load() メソッドを呼び出す場合、LoaderContext オブジェクトである context パラメータを指定できます。LoaderContext クラスには、ロードされたコンテンツの使用方法のコンテキストを定義できる次の 3 つのプロパティが含まれています。

  • checkPolicyFile - SWF ファイルではなく、イメージファイルをロードする場合にのみ、このプロパティを使用します。Loader オブジェクトを含んでいるファイルのドメイン以外のドメインのイメージファイルに対して、このプロパティを指定します。このプロパティを true に設定すると、Loader によってオリジンサーバーでクロスドメインポリシーファイルの有無がチェックされます(Web サイトの管理(クロスドメインポリシーファイル)参照)。サーバーが Loader ドメインに許可を与えた場合、Loader ドメイン内にある SWF ファイルの ActionScript は、ロードされたイメージ内のデータにアクセスできます。つまり、Loader.content プロパティを使用して、ロードされたイメージを表す Bitmap オブジェクトへの参照を取得するか、BitmapData.draw() メソッドを使用して、ロードされたイメージのピクセルにアクセスできます。
  • securityDomain - このプロパティは、イメージではなく SWF ファイルをロードする場合にのみ使用します。Loader オブジェクトを含むファイルのドメイン以外のドメインの SWF ファイルに対してこのプロパティを指定します。現時点で securityDomain プロパティに指定できる値は、null(デフォルト)と SecurityDomain.currentDomain の 2 つだけです。SecurityDomain.currentDomain を指定した場合、ロードされた SWF ファイルを、ロードする側の SWF ファイルのサンドボックスに「インポート」するように要求されます。つまり、ロードされた SWF ファイルがロードする側の SWF ファイルのサーバーからロードされたかのように動作することを意味します。これが許可されるのは、ロードされた SWF ファイルのサーバー上にクロスドメインポリシーファイルがあり、ロードする側の SWF ファイルのドメインによるアクセスを許可している場合だけです。要求されたポリシーファイルが検出された場合、ロードする側とロードされる側は、同じサンドボックス内にあるので、ロードが開始された後、自由にお互いをスクリプトすることができます。サンドボックスのインポートは、ほとんどの場合、通常のロードを実行した後に、ロードされた SWF ファイルを使用して Security.allowDomain() メソッドを呼び出すことに置き換えることができます。後者の方法の方が使いやすい場合もあります。なぜなら、ロードされた SWF ファイルはそれ自体の自然なサンドボックス内に入り、それ自体の実際のサーバー上にあるリソースにアクセスできるからです。
  • applicationDomain - ActionScript 1.0 または 2.0 で記述されたイメージまたは SWF ファイルではなく、ActionScript 3.0 で記述された SWF ファイルをロードする場合にのみ、このプロパティを使用します。ファイルをロードするときに、ファイルを特定のアプリケーションドメインに配置するよう指定できます。デフォルトのままでは、ファイルは新しいアプリケーションドメイン(ロードする側の SWF ファイルのアプリケーションドメインの子)に配置されます。アプリケーションドメインはセキュリティドメインのサブユニットです。したがって、ターゲットアプリケーションドメインを指定できるのは、ロードしようとしている SWF ファイルがユーザー自身のセキュリティドメインのものである場合だけです。なぜなら、それはユーザー自身のサーバーに入っているか、securityDomain プロパティを使用してセキュリティドメインへ正しくインポートされた SWF ファイルだからです。アプリケーションドメインを指定し、ロードされた SWF ファイルが別のセキュリティドメインに属している場合、applicationDomain で指定したドメインは無視されます。詳細については、ApplicationDomain クラスの使用を参照してください。

詳細については、ロードコンテキストの指定を参照してください。

Loader オブジェクトの重要なプロパティの 1 つに、contentLoaderInfo プロパティがあります。これは LoaderInfo オブジェクトです。他のほとんどのオブジェクトと異なり、LoaderInfo オブジェクトはロードする側の SWF ファイルとロードされたコンテンツの間で共有され、常に双方からアクセスできます。ロードされたコンテンツが SWF ファイルである場合、その SWF ファイルは DisplayObject.loaderInfo プロパティを通じて LoaderInfo オブジェクトにアクセスできます。LoaderInfo オブジェクトには、ロードの進行状況、ロードする側とロードされる側の URL、ロードする側とロードされる側の信頼関係、およびその他の情報が含まれています。詳細については、ロードの進行状況の監視を参照してください。

サウンドとビデオのロード

local-with-filesystem サンドボックス内に入っているものを除くすべての SWF ファイルで、Sound.load()NetConnection.connect() および NetStream.play() の各メソッドを使用して、ネットワークからサウンドおよびビデオをロードできます。

ローカル SWF ファイルだけが、ローカルファイルシステムからメディアをロードできます。それらのロードされたファイルのデータにアクセスできるのは、local-with-filesystem サンドボックスまたは local-trusted サンドボックスに入っている SWF ファイルだけです。

それ以外にも、ロードされたメディアのデータへのアクセスには制限があります。詳細については、ロードされたメディアへのデータとしてのアクセスを参照してください。

テキストフィールド内の <img> タグを使用した SWF ファイルとイメージのロード

SWF ファイルおよびビットマップをテキストフィールドにロードするには、次のコードに示すように、<img> タグを使用します。

<img src = 'filename.jpg' id = 'instanceName' >

この方法でロードされたコンテンツにアクセスするには、次のコードに示すように、TextField インスタンスの getImageReference() メソッドを使用します。

var loadedObject:DisplayObject = myTextField.getImageReference('instanceName');

ただし、この方法でロードされた SWF ファイルおよびイメージは元の場所に対応するサンドボックスに配置されます。

テキストフィールド内の <img> タグを使用してイメージファイルをロードする場合、イメージ内のデータへのアクセスは、クロスドメインポリシーファイルによって許可できます。ポリシーファイルの有無をチェックするには、次のコードに示すように、checkPolicyFile 属性を <img> タグに追加します。

<img src = 'filename.jpg' checkPolicyFile = 'true' id = 'instanceName' >

テキストフィールド内の <img> タグを使用して SWF をロードする場合、Security.allowDomain() メソッドを呼び出すことにより、その SWF ファイルのデータへのアクセスを許可できます。

SWF 内に埋め込んだ Bitmap クラスを使用せず、テキストフィールド内の <img> タグを使用して外部ファイルをロードする場合、Loader オブジェクトは TextField オブジェクトの子として自動的に作成され、外部ファイルは、ActionScript 内の Loader オブジェクトを使用してファイルをロードする場合とまったく同じように、Loader の中へロードされます。その場合、getImageReference() メソッドは、自動的に作成された Loader を返します。この Loader オブジェクトにアクセスするのに、セキュリティチェックの必要はありません。これは、オブジェクトが呼び出し側のコードと同じセキュリティサンドボックス内にあるためです。

ただし、ロードされたメディアにアクセスするために Loader オブジェクトの content プロパティを参照する場合は、セキュリティルールが適用されます。コンテンツがイメージである場合は、クロスドメインポリシーファイルを実装する必要があり、コンテンツが SWF ファイルである場合は、その SWF ファイル内のコードで allowDomain() メソッドを呼び出す必要があります。

RTMP サーバーを使用して配信されるコンテンツ

Flash Media Server は、RTMP(Real-Time Media Protocol)を使用してデータ、オーディオ、およびビデオを提供します。SWF ファイルは、NetConnection クラスの connect() メソッドを使用してこのメディアをロードし、パラメータとして RTMP URL を渡します。Flash Media Server は、要求元ファイルのドメインに基づいて、接続を制限し、コンテンツがダウンロードされないようにすることができます。詳細については、Flash Media Server のマニュアルを参照してください。

RTMP ソースからロードしたメディアの場合、BitmapData.draw() メソッドおよび SoundMixer.computeSpectrum() メソッドを使用してランタイムグラフィックおよびサウンドデータを抽出することはできません。

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート