コンテンツのロード

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

サブトピック

SWF ファイルとイメージのロード
サウンドとビデオのロード
テキストフィールドに <img> タグを使用した SWF ファイルとイメージのロード
RTMP サーバーを使用して送信されたコンテンツ

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 つのプロパティが含まれています。

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

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() メソッドを使用してランタイムグラフィックおよびサウンドデータを抽出することはできません。


 

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

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000353.html