Flash CS3 ドキュメンテーション |
|||
| ActionScript 3.0 のプログラミング > Flash Player セキュリティ > コンテンツのロード | |||
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 プロパティに指定できる値は 2 つだけです。つまり、null (デフォルト) と SecurityDomain.currentDomain です。SecurityDomain.currentDomain を指定した場合、これはロードされた SWF ファイルを、ロードする側の SWF ファイルのサンドボックスへ読み込むよう要求します。つまり、ロードされた SWF ファイルが、ロードする側の SWF ファイル自体のサーバーからロードされたかのように動作することを意味します。これが許可されるのは、ロードされた SWF ファイルのサーバー上でクロスドメインポリシーファイルがあり、ロードする側の SWF ファイルのドメインによるアクセスを許可している場合だけです。要求されたポリシーファイルが検出された場合、ロードする側とロードされる側は、同じサンドボックス内にあるので、ロードが開始された後、自由にお互いをスクリプトすることができます。サンドボックスの読み込みは、ほとんどの場合、通常のロードを実行した後に、ロードされた SWF ファイルに Security.allowDomain() メソッドを呼び出させることに置き換えることができます。後者の方法の方が使いやすい場合もあります。なぜなら、ロードされた SWF ファイルはそれ自体の自然なサンドボックス内に入り、それ自体の実際のサーバー上にあるリソースにアクセスできるからです。 applicationDomain - ActionScript 1.0 や ActionScript 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 ファイルだけです。
それ以外にも、ロードされたメディアのデータへのアクセスには制限があります。詳細については、ロードされたメディアへのデータとしてのアクセスを参照してください。
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() メソッドを呼び出す必要があります。
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