ファイルの読み込みについて
・ | ロード状況を取得する |
・ | 画像やSWFファイルを読み込む |
・ | サウンドファイルを読み込む |
・ | テキストファイルを読み込む |
・ | XMLファイルを読み込む |
・ | 動画ファイルを読み込む |
・ | バイナリファイルを読み込む |
ロード状況を取得する
サンプルをダウンロード
■ LoaderInfo クラスについて
自身のインスタンスの読み込み状況を調べるには、LoaderInfo クラスを使用します。
このクラスは、DisplayObject から派生しているクラスであれば、
loaderInfo プロパティに LoaderInfo オブジェクトが格納されているのでここからアクセスする事ができます。
stage のローダーインフォを取得する
var info : LoaderInfo = stage.loaderInfo;
■ 読み込み状況を調べる
現在の読み込みバイト数を調べるには、bytesLoaded プロパティを使用します。
読み込まれる総バイト数を調べるには、bytesTotal プロパティを調べます。
この2つのプロパティの数値が一致したときにすべての読み込みが完了したことがわかります。
読み込まれる総バイト数を調べるには、bytesTotal プロパティを調べます。
自身の swf ファイルの読み込み状況を調べる
var info : LoaderInfo = stage.loaderInfo;
stage.addEventListener(Event.ENTER_FRAME,EnterFrameFunc);
function EnterFrameFunc(event){
trace("読込数 : " + info.bytesLoaded);
trace("総数 : " + info.bytesTotal);
trace("パーセント : " + Math.floor(info.bytesLoaded / info.bytesTotal * 100));
if(info.bytesLoaded == info.bytesTotal){
trace("ロード完了");
stage.removeEventListener(Event.ENTER_FRAME,EnterFrameFunc);
}
}
■ イベントを使って読み込み状況を調べる
イベントを使って自身の swf ファイルの読み込み状況を調べる
// ローダーインフォを取得
var info : LoaderInfo = stage.loaderInfo;
// 読み込み中に常に呼び出される
info.addEventListener (ProgressEvent.PROGRESS,LoaderInfoProgressFunc);
function LoaderInfoProgressFunc (event : ProgressEvent):void {
trace ("読込:" + event.bytesLoaded);
trace ("全体:" + event.bytesTotal);
trace ("パーセント:" + Math.floor(event.bytesLoaded / event.bytesTotal * 100));
}
// 読み込み完了時に呼び出される
info.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
function LoaderInfoCompleteFunc (event : Event):void {
trace ("読み込みを完了");
}
■自身のswfファイルが格納されているURLを取得する
自身のファイルの置き場所となるURLを取得するには、url プロパティを使用します。
自身の swf ファイルが格納されているURLを取得する
var info : LoaderInfo = stage.loaderInfo;
trace("ファイルパス : " + info.url);
■自身のバイナリを取得する
自身のファイルのバイナリを取得するには、bytes プロパティを使用します。
自身のswfファイルのバイナリを取得する
var info : LoaderInfo = stage.loaderInfo;
var bytes : ByteArray = info.bytes;
画像やSWFファイルを読み込む
サンプルをダウンロード
■Loader クラスについて
Loader クラスを使うと、「画像」や 「 swf ファイル」を読み込んで Flash 画面上に表示することができます。
読み込めるフォーマットは、GIF、JPEG、PNG 形式です。GIFアニメ形式は1フレーム目のみ表示できます。
SWF ファイルは、どのバージョンでも読み込めます。
「ActionScript3.0 で書き出された swf ファイル」の場合は、プロパティやメソッドに相互アクセスできます。
「ActionScript1.0 か 2.0 で書き出された swf ファイル」の場合は、プロパティやメソッドに相互アクセスする事ができません。
Loader は以下のクラスから派生しています。ここで解説してない分はリンク先に解説がありますので合わせてご覧下さい。
Object |
↓派生 |
EventDispatcher |
↓派生 |
DisplayObject |
↓派生 |
InteractiveObject |
↓派生 |
DisplayObjectContainer |
↓派生 |
Loader |
■サンドボックスについて
swf ファイルから別ドメインにある画像や swf ファイルを読み込む場合、サンドボックスによる制限があります。
読み込んで表示するだけなら特に設定は不要ですが、ビットマップへのキャプチャーなど、内部のデータにアクセスしようとするとエラーとなります。
画像ファイルのサンドボックスによる制限を解除するには、クロスドメインポリシーファイルを設置する必要があります。
swf ファイルを読み込んで相互アクセスしたい場合は、クロスドメインスクリプトの設定を行う必要があります。
swf ファイルを読み込んで相互アクセスしたい場合は、クロスドメインスクリプトの設定を行う必要があります。
■ローダークラスをインスタンス化する
まずローダークラスをインスタンス化します。
new Loader ();
第01引数 | なし |
戻り値 | URLLoader オブジェクト |
URLLoader オブジェクトを作成する
var loader_obj : Loader = new Loader();
■読み込みを開始する
load() メソッドを使うと読み込みを開始することが出来ます。
引数にファイルまでの相対パスかURLを URLRequest オブジェクトで指定します。
すでに読み込み中にもかかわらずこのメソッドを呼び出した場合は、以前の読み込み処理が終了し新しく読み込みを開始します。
Loader.load ( URLRequest型 , LoaderContext型 );
第01引数 | ファイルまでの相対パスかURLをURLRequest型で指定します。 |
第02引数(略可) | セキュリティに関する情報をLoaderContext型で指定します。 |
戻り値 | なし |
ファイルの読み込みを開始する
var loader_obj : Loader = new Loader();
var url : URLRequest = new URLRequest("http://hakuhin.jp/test.swf");
loader_obj.load(url);
swfファイルからの相対パスを使う事もできる
var loader_obj : Loader = new Loader();
var url : URLRequest = new URLRequest("../sound/test.png");
loader_obj.load(url);
■読み込みを停止する
読み込みを停止したい場合は、close() メソッドを呼び出します。
読み込みが最後まで完了した場合、このメソッドを呼び出すとエラーとなります。
読み込みが最後まで完了した場合、このメソッドを呼び出すとエラーとなります。
読み込みを停止する
var loader_obj : Loader = new Loader();
var url : URLRequest = new URLRequest("test.swf");
loader_obj.load(url);
try{
loader_obj.close();
}catch(e:Error){
trace("停止失敗");
}
■読み込んだデータを破棄する
読み込んだデータを破棄したい場合は、unload() メソッドを呼び出します。
読み込んだデータを破棄する
var loader_obj : Loader = new Loader();
var url : URLRequest = new URLRequest("test.swf");
loader_obj.load(url);
loader_obj.unload();
■読み込んだデータを Flash 画面に表示する
読み込んだデータを Flash 画面上に表示するには、Loader オブジェクトを表示リストに登録します。表示リストについてはこちらで解説しています。
ファイルを読み込み stage の表示リストに登録して画面に表示する
var loader_obj : Loader = new Loader();
var url : URLRequest = new URLRequest("test.swf");
loader_obj.load(url);
stage.addChild(loader_obj);
■読み込んだファイルをバイナリデータとして取得する
読み込んだデータを バイナリデータとして取得するには bytes プロパティを使用します。
サンドボックスによる制限があっても取得することができます。
ファイルを読み込みバイナリとして取得
var loader_obj : Loader = new Loader();
var url : URLRequest = new URLRequest("test.swf");
loader_obj.load(url);
// ローダーインフォを取得
var info : LoaderInfo = loader_obj.contentLoaderInfo
info.addEventListener (Event.INIT,LoaderInfoInitFunc);
function LoaderInfoInitFunc (event : Event):void {
var bytes : ByteArray = info.bytes;
}
■読み込み状況を調べる
「どれだけ読み込まれたか?」というローディング状況を知りたい場合は、
Event.OPEN、
ProgressEvent.PROGRESS、
Event.INIT、
Event.COMPLETE、
IOErrorEvent.IO_ERROR
イベントを使用します。LoaderInfo オブジェクトに登録します。
ProgressEvent.PROGRESS、
Event.INIT、
Event.COMPLETE、
IOErrorEvent.IO_ERROR
読み込み状況を知る
var loader_obj : Loader = new Loader();
// ローダーインフォを取得
var info : LoaderInfo = loader_obj.contentLoaderInfo;
info.addEventListener (Event.OPEN,LoaderInfoOpenFunc);
function LoaderInfoOpenFunc (event : Event):void {
trace ("読み込みを開始した");
}
info.addEventListener (ProgressEvent.PROGRESS,LoaderInfoProgressFunc);
function LoaderInfoProgressFunc (event : ProgressEvent):void {
trace ("読込:" + event.bytesLoaded);
trace ("全体:" + event.bytesTotal);
trace ("パーセント:" + Math.floor(event.bytesLoaded/event.bytesTotal*100));
}
info.addEventListener (Event.INIT,LoaderInfoInitFunc);
function LoaderInfoInitFunc (event : Event):void {
trace ("読み込んだコンテンツの初期化が行われた");
}
info.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
function LoaderInfoCompleteFunc (event : Event):void {
trace ("読み込み完了");
}
info.addEventListener (IOErrorEvent.IO_ERROR,LoaderInfoIOErrorFunc);
function LoaderInfoIOErrorFunc (event : IOErrorEvent):void {
trace ("ファイル入出力のエラー");
}
// 読み込み開始
var url : URLRequest = new URLRequest("test.swf");
loader_obj.load(url);
■読み込んだファイルの情報を取得する
読み込んだファイルの情報を取得したい場合は、LoaderInfo オブジェクトのプロパティを使用します。
よく利用しそうなプロパティを列挙してみました。「全」という項目が○のプロパティは
すべて読み込みが完了するまで正確なパラメータを取得することができません。
全 | プロパティ名 | 型 | 説明 |
○ | contentType | String | ファイルの MIME タイプ (SWFファイル) "application/x-shockwave-flash" (JPEGファイル) "image/jpeg" (GIFファイル) "image/gif" (PNGファイル) "image/png" (不明なバイナリ) null |
○ | url | String | 読み込まれるファイルの置き場所 |
× | loaderURL | String | 読み込み要求するSWFファイルの置き場所 |
○ | width | int | コンテンツの幅 |
○ | height | int | コンテンツの高さ |
読み込んだファイルの情報を取得する
var loader_obj : Loader = new Loader();
// ローダーインフォを取得
var info : LoaderInfo = loader_obj.contentLoaderInfo;
// すべて読み込まれ初期化が完了したとき
info.addEventListener (Event.INIT,LoaderInitFunc);
function LoaderInitFunc (event) {
trace("MIME タイプ : " + info.contentType);
trace("ファイルの置き場所 : " + info.url);
trace("要求側ファイルの置き場所 : " + info.loaderURL);
trace("幅 : " + info.width);
trace("高さ : " + info.height);
}
// 読み込み開始
var url : URLRequest = new URLRequest("test.png");
loader_obj.load (url);
■読み込んだSWFファイルの情報を得る
読み込んだファイルが swf ファイルであるか調べるには、contentType プロパティが "application/x-shockwave-flash" であるか調べます。
読み込んだSWFファイルの情報を得る
var loader_obj : Loader = new Loader();
// ローダーインフォを取得
var info : LoaderInfo = loader_obj.contentLoaderInfo;
// すべて読み込まれ初期化が完了したとき
info.addEventListener (Event.INIT,LoaderInitFunc);
function LoaderInitFunc (event) {
// SWFファイルかチェック
if(info.contentType == "application/x-shockwave-flash"){
trace("SWFファイルである");
}else{
trace("SWFファイルではない");
}
}
// 読み込み開始
var url : URLRequest = new URLRequest("test.swf");
loader_obj.load (url);
読み込んだファイルが、 swf ファイルである場合のみ取得できるプロパティの一覧です。
全 | プロパティ名 | 型 | 説明 |
○ | swfVersion | uint | SWFファイルのバージョン SWFVersion.* |
○ | frameRate | Number | フレームレート |
○ | actionScriptVersion | uint | 使用されているアクションスクリプトのバージョン |
読み込んだSWFファイルの情報を得る
var loader_obj : Loader = new Loader();
// ローダーインフォを取得
var info : LoaderInfo = loader_obj.contentLoaderInfo;
// すべて読み込まれ初期化が完了したとき
info.addEventListener (Event.INIT,LoaderInitFunc);
function LoaderInitFunc (event) {
// SWFファイルかチェック
if(info.contentType == "application/x-shockwave-flash"){
trace("SWFファイルのバージョン : " + info.swfVersion);
trace("フレームレート : " + info.frameRate);
trace("アクションスクリプトのバージョン : " + info.actionScriptVersion);
}
}
// 読み込み開始
var url : URLRequest = new URLRequest("test.swf");
loader_obj.load (url);
■親 SWF ファイルから読み込んだ子 SWF ファイルにアクセスする
ActionScript3.0 で書き出された swf ファイル同士であれば、プロパティやメソッドなど相互にアクセスが可能です。
「親 swf ファイル」から、Loader オブジェクトを使って 「子 swf ファイル」を読み込んだとします。
「親 swf ファイル」から「子 swf ファイル」にアクセスしたい場合、
Loader クラスの content プロパティを使用します。content プロパティには
「親 swf ファイル」の MainTimeline オブジェクトが格納されています。
「親 swf ファイル」から、Loader オブジェクトを使って 「子 swf ファイル」を読み込んだとします。
子 swf ファイルにアクセスする(親 swf ファイルに記述)
var loader_obj : Loader = new Loader();
// ローダーインフォを取得
var info : LoaderInfo = loader_obj.contentLoaderInfo;
info.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
function LoaderInfoCompleteFunc (event : Event) {
var child : DisplayObject = loader_obj.content; // 子の MainTimeline
trace(child);
}
// 読み込み開始
var url : URLRequest = new URLRequest("test.swf");
loader_obj.load(url);
■読み込んだ子 SWF ファイルから親 SWF ファイルにアクセスする
「親 swf ファイル」から、Loader オブジェクトを使って 「子 swf ファイル」を読み込んだとします。
「子 swf ファイル」から「親 swf ファイル」にアクセスしたい場合、
子の MainTimeline から parent プロパティを調べると、親の Loader オブジェクトにアクセスできます。
さらに親の表示リスト内を巡るには、Loader オブジェクトが表示リストに登録されている必要があります。
親 swf ファイルにアクセスする(子 swf ファイル内のルートタイムラインに記述)
var loader_parent : Loader = root.parent as Loader; // 親の Loader
if(loader_parent){
trace(loader_parent);
trace(loader_parent.parent);
}
■swf ファイルのクロスドメインスクリプトについて
「親 swf ファイル」から、Loader オブジェクトを使って 別ドメインにある「子 swf ファイル」を読み込んだ場合、
読み込んだ swf ファイルを Flash 画面上に表示することは可能ですが、プロパティやメソッドに相互アクセスする事はできません。
このアクセス制限やサンドボックスによる制限を解除するには、Security.allowDomain() メソッドを使用します。
引数にドメインを指定すれば、自身がそのドメインから読み込まれた場合、プロパティやメソッドにアクセスされる事を許可します。
相互アクセスしたい場合は、どちらにも相手のドメインを許可する設定を追加します。
記述例です。
「 hakuhin.jp 」から読み込まれた場合、プロパティやメソッドにアクセスされる事を許可する
Security.allowDomain("hakuhin.jp");
すべてのドメインからプロパティやメソッドにアクセスされる事を許可する
Security.allowDomain("*");
別ドメイン間をスクリプトでアクセスする事をクロスドメインスクリプトといいます。
■ByteArray 型の配列に格納したデータから読み込む
loadBytes() メソッドを使用すると、ファイルからの読み込みではなく、メモリから読み込むことができます。
ByteArray 型のデータを読み込んで画像やSWFファイルを動的にインスタンス化して使用することができます。
Loader.loadBytes ( ByteArray型 , LoaderContext型 );
第01引数 | バイナリデータをByteArray型の変数に格納して指定します。 |
第02引数(略可) | セキュリティに関する情報をLoaderContext型で指定します。 |
戻り値 | なし |
バイナリデータからSWFファイルを読み込む
var stream:ByteArray = new ByteArray();
var data = [
0x46,0x57,0x53,0x05,0x56,0x00,0x00,0x00,0x70,0x00,0x0F,0xA0,0x00,0x00,0xBB,0x80,
0x00,0x1E,0x01,0x00,0x43,0x02,0xFF,0xFF,0xFF,0xBF,0x00,0x2B,0x00,0x00,0x00,0x01,
0x00,0x70,0x7D,0x0D,0xAC,0x07,0xD0,0x9C,0x40,0x02,0x00,0x00,0x66,0xCC,0x00,0xFF,
0x00,0x00,0x01,0x14,0x00,0x00,0x00,0x00,0x21,0x15,0xCD,0xAC,0x27,0x11,0x78,0x51,
0x21,0xDB,0x06,0x0F,0x05,0xDC,0x3B,0x5F,0x40,0x00,0x86,0x06,0x06,0x01,0x00,0x01,
0x00,0x00,0x40,0x00,0x00,0x00
];
var i;
var num = data.length;
for(i=0; i < num; i++) {
stream.writeByte(data[i]);
}
var loader_obj : Loader = new Loader();
loader_obj.loadBytes(stream);
stage.addChild(loader_obj);
loadBytes() メソッドは非同期で実行される為、すぐにインスタンス化する事ができません。
エラーがある場合は loadBytes() メソッドを呼び出した直後にイベントが発生する為、必ずイベントを先に設定してからこのメソッドを呼び出す必要があります。
また、同じタイミングでloadBytes() メソッドを何度も呼び出すと前の処理が中断する事があります。
確実に読み込みが終了した事をイベントで確認してからもう一度 loadBytes() イベントを呼び出すとよさそうです。
エラーがある場合は loadBytes() メソッドを呼び出した直後にイベントが発生する為、必ずイベントを先に設定してからこのメソッドを呼び出す必要があります。
イベントを使用する
var stream:ByteArray = new ByteArray();
var data = [
0x46,0x57,0x53,0x05,0x56,0x00,0x00,0x00,0x70,0x00,0x0F,0xA0,0x00,0x00,0xBB,0x80,
0x00,0x1E,0x01,0x00,0x43,0x02,0xFF,0xFF,0xFF,0xBF,0x00,0x2B,0x00,0x00,0x00,0x01,
0x00,0x70,0x7D,0x0D,0xAC,0x07,0xD0,0x9C,0x40,0x02,0x00,0x00,0x66,0xCC,0x00,0xFF,
0x00,0x00,0x01,0x14,0x00,0x00,0x00,0x00,0x21,0x15,0xCD,0xAC,0x27,0x11,0x78,0x51,
0x21,0xDB,0x06,0x0F,0x05,0xDC,0x3B,0x5F,0x40,0x00,0x86,0x06,0x06,0x01,0x00,0x01,
0x00,0x00,0x40,0x00,0x00,0x00
];
var i;
var num = data.length;
for(i=0; i < num; i++) {
stream.writeByte(data[i]);
}
var loader_obj : Loader = new Loader();
var info : LoaderInfo = loader_obj.contentLoaderInfo;
info.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
function LoaderInfoCompleteFunc (event : Event) {
stage.addChild(loader_obj);
trace ("メモリストリームから読み込みに成功");
}
info.addEventListener (IOErrorEvent.IO_ERROR,LoaderInfoIOErrorFunc);
function LoaderInfoIOErrorFunc (event : IOErrorEvent) {
trace ("ファイル入出力のエラー");
}
loader_obj.loadBytes(stream);
サウンドファイルを読み込む
■サウンドファイルを読み込む
サウンドファイルの外部読み込みについてはこちらにまとめています。
外部からサウンドファイルを読み込み再生する
var url : URLRequest = new URLRequest("http://hakuhin.jp/test.mp3");
var loader_obj : Sound = new Sound(url);
SoundChannel = loader_obj.play();
テキストファイルを読み込む
サンプルをダウンロード
■ URLLoader クラスについて
■ URLLoader クラスについて
外部ファイルを読み込むには、URLLoader クラスを使用します。
URLLoader クラスについては、こちらで解説しています。
■テキストファイルを読み込む
1.String 型を、読み込むデータ型に指定する
この設定は省略可能です。デフォルトでテキストを読み込みます。
2.外部ファイルの読み込みを開始する
load() メソッドを使用します。
3.読み込みが完了したか調べる
こちらで解説しています。
4.読み込んだデータを取得する
data プロパティを使用します。
ここでは、文字列が得られます。
■テキストファイルを読み込む例
テキストファイルを読み込む
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.utils.ByteArray;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
// ------------------------------------------------------------
// URLLoader オブジェクトを作成する
// ------------------------------------------------------------
var url_loader:URLLoader = new URLLoader();
// ------------------------------------------------------------
// 読み込みに成功すると実行されるイベント(レスボンス結果の取得可能)
// ------------------------------------------------------------
url_loader.addEventListener( Event.COMPLETE , function (e:Event):void{
// レスポンスボディを取得する
var response:String = url_loader.data as String;
// 出力テスト
trace(response);
});
// ------------------------------------------------------------
// 読み込みに失敗すると実行されるイベント
// ------------------------------------------------------------
url_loader.addEventListener( IOErrorEvent.IO_ERROR , function (e:IOErrorEvent):void{
trace("HTTP 通信失敗");
});
// ------------------------------------------------------------
// 読み込みに失敗すると実行されるイベント (セキュリティ関連)
// ------------------------------------------------------------
url_loader.addEventListener( SecurityErrorEvent.SECURITY_ERROR , function (e:SecurityErrorEvent):void{
trace("HTTP 通信失敗(原因はセキュリティ)");
});
// ------------------------------------------------------------
// 受信フォーマットを設定
// ------------------------------------------------------------
url_loader.dataFormat = URLLoaderDataFormat.TEXT;
// ------------------------------------------------------------
// URLRequest オブジェクトを作成する
// ------------------------------------------------------------
var url_request:URLRequest = new URLRequest("http://example.com/download/string.txt");
// ------------------------------------------------------------
// 読み込みを開始する
// ------------------------------------------------------------
url_loader.load(url_request);
■外部ファイル読み込みのセキュリティについて
■クロスドメインポリシーについて
別ドメインにある、外部ファイルを読み込む事はできません。
■クロスドメインポリシーの解除について
こちらで解説しています。
■任意の文字コードのテキストファイルを読み込む
デフォルトでは、UTF-8 形式のテキストを、読み込む事ができます。
UTF-8 形式以外のテキストを読み込むと、文字化けします。
■任意の文字コードのバイナリから、String 型に変換する
バイナリの読み込みについては、こちらで解説しています。
■Shift-JIS 形式のテキストを読み込む例
"Shift-JIS" 形式のテキストファイルを読み込む
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.utils.ByteArray;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
// ------------------------------------------------------------
// URLLoader オブジェクトを作成する
// ------------------------------------------------------------
var url_loader:URLLoader = new URLLoader();
// ------------------------------------------------------------
// 読み込みに成功すると実行されるイベント(レスボンス結果の取得可能)
// ------------------------------------------------------------
url_loader.addEventListener( Event.COMPLETE , function (e:Event):void{
// ------------------------------------------------------------
// レスポンスボディを取得する
// ------------------------------------------------------------
var byte_array:ByteArray = url_loader.data as ByteArray;
// ------------------------------------------------------------
// 文字コードを指定して文字列として読み込む
// ------------------------------------------------------------
// 開始位置を 0 に設定
byte_array.position = 0;
// 「"Shift-JIS" 形式のバイナリ」から文字列を取得する
var response:String = byte_array.readMultiByte(byte_array.length , "shift_jis");
// 出力テスト
trace(response);
});
// ------------------------------------------------------------
// 読み込みに失敗すると実行されるイベント
// ------------------------------------------------------------
url_loader.addEventListener( IOErrorEvent.IO_ERROR , function (e:IOErrorEvent):void{
trace("HTTP 通信失敗");
});
// ------------------------------------------------------------
// 読み込みに失敗すると実行されるイベント (セキュリティ関連)
// ------------------------------------------------------------
url_loader.addEventListener( SecurityErrorEvent.SECURITY_ERROR , function (e:SecurityErrorEvent):void{
trace("HTTP 通信失敗(原因はセキュリティ)");
});
// ------------------------------------------------------------
// 受信フォーマットを設定
// ------------------------------------------------------------
url_loader.dataFormat = URLLoaderDataFormat.BINARY;
// ------------------------------------------------------------
// URLRequest オブジェクトを作成する
// ------------------------------------------------------------
var url_request:URLRequest = new URLRequest("http://example.com/download/string.txt");
// ------------------------------------------------------------
// 読み込みを開始する
// ------------------------------------------------------------
url_loader.load(url_request);
XMLファイルを読み込む
サンプルをダウンロード
■ XML ファイルを読み込む
■テキストファイルを読み込む
XML ファイルを、テキストとして読み込みます。
テキストファイルを読み込む方法は、こちらで解説しています。
「XML 文字列」を解析する方法は、2通りあります。
■ E4X (ECMAScript for XML) で解析する
XML クラスを使用すると、E4X (ECMAScript for XML) を利用できます。
E4X は、JavaScript では廃止済みです。
https://developer.mozilla.org/ja/docs/E4X
http://www.ecma-international.org/publications/standards/Ecma-357.htm
■ XML クラスについて
XML オブジェクトは、ノード1つ分に相当します。
要素、属性、テキスト、コメントなどです。
名前情報を取得するには、name() メソッドを使用します。
値情報を取得するには、toString() メソッドを使用します。
大抵の場合、暗黙的に呼び出されるでしょう。
■ XMLList クラスについて
「XMLList オブジェクト」は、「XML オブジェクト」のリストです。
「XMLList オブジェクト」は、配列のようにアクセスできます。
「XML オブジェクト」が得られます。
総数を取得するには、length() メソッドを使用します。
値情報を取得するには、toString() メソッドを使用します。
中身が1つの場合に効果的です。複数の場合、自身を含む XML 文字列が、順番に連結されます。
■ XML オブジェクトを作成する
XML 文字列をパースするには、XML クラスを使用します。
こちらで解説しています。
■ドットアクセス演算子について
自身から、「子要素」や「自身の属性」を選び出す事ができます。
結果、新しい XMLList オブジェクトが得られます。
マッチするのが1つとは限りません。複数マッチする事もあります。
マッチしなかった場合でも、空の XMLList オブジェクトが必ず得られます。
null ではありません。無いと判別する場合は注意します。
■ドットアクセス演算子の書式について
書式 | 説明 |
.* | 「子要素」をすべて取得する |
.@* | 「自身の属性」をすべて取得する |
.要素名 | 「名前」とマッチする「子要素」をすべて取得する |
.@属性名 | 「名前」とマッチする「自身の属性」をすべて取得する |
■ XMLList オブジェクトから、ドットアクセス演算子を利用する
ドットアクセス演算子を数珠つなぎにして、子孫まで辿る事ができます。
これにより、複合的に大規模にマッチする事もあります。
■子孫アクセス演算子 (..) について
『 .. 』 と記述した場合、検索対象は子孫すべてとなります。
■子孫アクセス演算子 (..) の書式について
書式 | 説明 |
..* | 「子孫の要素」をすべて取得する |
..@* | 「子孫の属性」をすべて取得する |
..要素名 | 「名前」とマッチする「子孫の要素」をすべて取得する |
..@属性名 | 「名前」とマッチする「子孫の属性」をすべて取得する |
■フィルタについて
フィルタを使用すると、リストの中から、偽となるアイテムを除外できます。
『 .( 比較式 ) 』と記述します。
比較式には、通常の命令文を記述できます。
アイテムの数だけ、比較式は繰り返し実行されます。
比較式の中には、以下の記述が可能です。
0 件のパターンが出現した場合、その時点でエラーが発生します。
書式 | 説明 |
子の要素名 | 該当する子要素が1つ格納された XMLList オブジェクト |
@自身の属性名 | 該当する属性が1つ格納された XMLList オブジェクト |
* | 子要素がすべて格納された NodeList オブジェクト |
『 *.parent() 』と記述すると、自身の参照が得られます。
■取得例
ドットアクセス演算子を使って、各値を取得する
// ------------------------------------------------------------
// XML 文字列を用意する
// ------------------------------------------------------------
var text_xml:String =
'<?xml version="1.0" encoding="UTF-8"?>\n' +
'<ルート>\n' +
' <要素A 属性名="属性値A">テキストA</要素A>\n' +
' <要素B 属性名="属性値B">テキストB</要素B>\n' +
' <コンテナA>\n' +
' <要素C 属性名="属性値C">テキストC</要素C>\n' +
' <要素D 属性名="属性値D">テキストD</要素D>\n' +
' <コンテナB>\n' +
' <要素E 属性名="属性値E">テキストE</要素E>\n' +
' <要素F 属性名="属性値F">テキストF</要素F>\n' +
' </コンテナB>\n' +
' </コンテナA>\n' +
'</ルート>';
// ------------------------------------------------------------
// XML オブジェクトを作成する
// ------------------------------------------------------------
var xml_root:XML = new XML(text_xml);
// ------------------------------------------------------------
// 要素値(テキスト)を取得する例(1つだけマッチする場合)
// ------------------------------------------------------------
trace( xml_root.要素A ); // "テキストA"
trace( xml_root.要素B ); // "テキストB"
trace( xml_root.コンテナA.要素C ); // "テキストC"
trace( xml_root.コンテナA.要素D ); // "テキストD"
trace( xml_root.コンテナA.コンテナB.要素E ); // "テキストE"
trace( xml_root.コンテナA.コンテナB.要素F ); // "テキストF"
// ------------------------------------------------------------
// 属性値を取得する例(1つだけマッチする場合)
// ------------------------------------------------------------
trace( xml_root.要素A.@属性名 ); // "属性値A"
trace( xml_root.要素B.@属性名 ); // "属性値B"
trace( xml_root.コンテナA.要素C.@属性名 ); // "属性値C"
trace( xml_root.コンテナA.要素D.@属性名 ); // "属性値D"
trace( xml_root.コンテナA.コンテナB.要素E.@属性名 ); // "属性値E"
trace( xml_root.コンテナA.コンテナB.要素F.@属性名 ); // "属性値F"
マッチする複数の XML オブジェクトを取得する
// ------------------------------------------------------------
// XMLList のトレースする関数
// ------------------------------------------------------------
function XMLList_trace(list:XMLList):void{
// アイテムの総数を取得
var num:int = list.length();
// 順番に取得する
var i:int;
for(i=0;i < num;i++){
// XML オブジェクトを取得する
var xml_obj:XML = list[i];
// 名前情報を取得する
var name:String = xml_obj.name();
// 値情報を取得する
var value:String = xml_obj.toString();
// 出力テスト
trace("id:" + i + " name:" + name + " value:" + value);
}
trace(" --- ");
}
// ------------------------------------------------------------
// XML 文字列を用意する
// ------------------------------------------------------------
var text_xml:String =
'<?xml version="1.0" encoding="UTF-8"?>\n' +
'<ルート>\n' +
' <コンテナ xxx="属性値X" yyy="属性値Y" zzz="属性値Z">\n' +
' <要素 属性名="属性値A">テキストA</要素>\n' +
' <要素 属性名="属性値B">テキストB</要素>\n' +
' <要素 属性名="属性値C">テキストC</要素>\n' +
' <要素 属性名="属性値D">テキストD</要素>\n' +
' </コンテナ>\n' +
'</ルート>';
// ------------------------------------------------------------
// XML オブジェクトを作成する
// ------------------------------------------------------------
var xml_root:XML = new XML(text_xml);
// ------------------------------------------------------------
// 複数の XML オブジェクトを取得する(複数マッチする場合)
// ------------------------------------------------------------
// マッチする要素をすべて取得する
XMLList_trace( xml_root.コンテナ.要素 );
// マッチする属性をすべて取得する
XMLList_trace( xml_root.コンテナ.要素.@属性名 );
// 属性をすべて取得する
XMLList_trace( xml_root.コンテナ.@* );
// 子孫要素をすべて取得する
XMLList_trace( xml_root..* );
■フィルタの使用例
フィルタを使用する
// ------------------------------------------------------------
// XMLList のトレースする関数
// ------------------------------------------------------------
function XMLList_trace(list:XMLList):void{
// アイテムの総数を取得
var num:int = list.length();
// 順番に取得する
var i:int;
for(i=0;i < num;i++){
// XML オブジェクトを取得する
var xml_obj:XML = list[i];
// 名前情報を取得する
var name:String = xml_obj.name();
// 値情報を取得する
var value:String = xml_obj.toString();
// 出力テスト
trace("id:" + i + " name:" + name + " value:" + value);
}
trace(" --- ");
}
// ------------------------------------------------------------
// XML 文字列を用意する
// ------------------------------------------------------------
var text_xml:String =
'<?xml version="1.0" encoding="UTF-8"?>\n' +
'<ルート>\n' +
' <コンテナ>\n' +
' <アイテム 値="0">テキストA</アイテム>\n' +
' <アイテム 値="1">テキストB</アイテム>\n' +
' <アイテム 値="2">テキストC</アイテム>\n' +
' <アイテム 値="3">テキストD</アイテム>\n' +
' <アイテム 値="4">テキストE</アイテム>\n' +
' </コンテナ>\n' +
'</ルート>';
// ------------------------------------------------------------
// XML オブジェクトを作成する
// ------------------------------------------------------------
var xml_root:XML = new XML(text_xml);
// ------------------------------------------------------------
// フィルタを使ってアイテムを絞る
// ------------------------------------------------------------
// 自身の値(テキスト)が、"テキストA" であるアイテムを抽出
XMLList_trace( xml_root.コンテナ.アイテム.( (*.parent()) == "テキストA" ) );
// 自身の値(テキスト)と正規表現がマッチするアイテムを抽出
XMLList_trace( xml_root.コンテナ.アイテム.( (*.parent()).match(new RegExp("テキストB")) ) );
// 自身の属性値が、2 か 4 であるアイテムを抽出
XMLList_trace( xml_root.コンテナ.アイテム.( (@値 == 2) || (@値 == 4) ) );
// 自身の属性値が、1 以上であるアイテムを抽出
XMLList_trace( xml_root.コンテナ.アイテム.( @値 >= 1 ) );
■ DOM (Document Object Model) で解析する
■ XMLDocument クラスについて
XMLDocument クラスは、DOM における Document に相当します。
■ XMLNode クラスについて
XMLNode クラスは、DOM における Node に相当します。
■ XMLDocument オブジェクトを作成する
XML 文字列を、パースするには、XMLDocument クラスを使用します。
こちらで解説しています。
■使用例
XMLNode のすべての子孫を検索する
import flash.xml.XMLDocument;
import flash.xml.XMLNode;
import flash.xml.XMLNodeType;
// ------------------------------------------------------------
// XMLNode のすべての子孫を検索する関数
// ------------------------------------------------------------
function XMLNodeFindAllDescendants(node:XMLNode,func:Function):*{
function f(n:XMLNode):*{
var nodes:Array = n.childNodes;
var r:*;
var i:int;
var num:int = nodes.length;
var a:Array = new Array();
for(i=0;i < num;i++){ a[i] = nodes[i]; }
for(i=0;i < num;i++){
r = func(a[i]);
if(r){ return r; }
r = f(a[i]);
if(r){ return r; }
}
return null;
}
return f(node);
}
// ------------------------------------------------------------
// XML 文字列を用意する
// ------------------------------------------------------------
var text_xml:String =
'<?xml version="1.0" encoding="UTF-8"?>\n' +
'<ルート>\n' +
' <要素A 属性名="属性値A">テキストA</要素A>\n' +
' <要素B 属性名="属性値B">テキストB</要素B>\n' +
' <要素C 属性名="属性値C">テキストC</要素C>\n' +
'</ルート>';
// ------------------------------------------------------------
// XMLDocument オブジェクトを作成する
// ------------------------------------------------------------
var xml_document:XMLDocument = new XMLDocument();
// 空白改行タブなどの整形文字を除外する
xml_document.ignoreWhite = true;
// XML 文字列をパースする
xml_document.parseXML(text_xml);
// ------------------------------------------------------------
// XMLNode のすべての子孫を検索する
// ------------------------------------------------------------
XMLNodeFindAllDescendants(xml_document , function(node:XMLNode):*{
// ------------------------------------------------------------
// 情報を取得
// ------------------------------------------------------------
// ノードタイプを取得する
var node_type:uint = node.nodeType;
// 名前情報を取得する
var node_name:String = node.nodeName;
// 値情報を取得する
var node_value:String = node.nodeValue;
// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
trace(" --- ");
trace("type:" + node_type + " name:" + node_name + " value:" + node_value);
switch(node_type){
// ------------------------------------------------------------
// ノードは「要素」である
// ------------------------------------------------------------
case XMLNodeType.ELEMENT_NODE:
// ------------------------------------------------------------
// 「属性」の連想配列を取得(配列ではないので注意)
// ------------------------------------------------------------
var attributes:Object = node.attributes;
var key:String;
for(key in attributes){
// 属性名を取得
var attr_name:String = key;
// 属性値を取得
var attr_value:String = attributes[key];
// 出力テスト
trace(" attribute name:" + attr_name + " value:" + attr_value);
}
break;
// ------------------------------------------------------------
// ノードは「テキスト」である
// ------------------------------------------------------------
case XMLNodeType.TEXT_NODE:
break;
}
// 検索を継続(任意のオブジェクトを返すと終了)
return null;
});
// ------------------------------------------------------------
// "要素B" という名前の要素を取得する
// ------------------------------------------------------------
var result:* = XMLNodeFindAllDescendants(xml_document , function(node:XMLNode):*{
// ノードは「要素」である
if(node.nodeType == XMLNodeType.ELEMENT_NODE){
// 要素名は "要素B" である
if(node.nodeName == "要素B"){
// ノードを返して検索を終了
return node;
}
}
// 検索を継続
return null;
});
// 出力テスト
trace(result);
■ XML オブジェクトを作成する
■ XML オブジェクトを作成する
new 演算子を使って、XML クラスをインスタンス化します。
new XML( value ) :XML
第01引数 | Object | XML 型に変換可能なソースを指定 |
戻り値 | XML | 新しい XML オブジェクトが得られる |
■第01引数 ソース
「XML 文字列」を渡します。
XML 文字列は、XML フォーマットとして正確である必要があります。
閉じタグが無いなどの不備がある場合、パースは失敗します。
■戻り値
成功すると、XML オブジェクトによるツリーが構築されます。
戻り値の XML オブジェクトは、ルートの要素に相当します。
■作成例
XML オブジェクトを作成する
// ------------------------------------------------------------
// XML 文字列を用意する
// ------------------------------------------------------------
var text_xml:String =
'<?xml version="1.0" encoding="UTF-8"?>\n' +
'<ルート>\n' +
' <要素A 属性名="属性値A">テキストA</要素A>\n' +
' <要素B 属性名="属性値B">テキストB</要素B>\n' +
' <要素C 属性名="属性値C">テキストC</要素C>\n' +
'</ルート>';
// ------------------------------------------------------------
// XML オブジェクトを作成する
// ------------------------------------------------------------
var xml_obj:XML = new XML(text_xml);
// 出力テスト
trace(xml_obj);
■ XMLDocument オブジェクトを作成する
■ XMLDocument オブジェクトを作成する
new 演算子を使って、XMLDocument クラスをインスタンス化します。
new XMLDocument( value ) :XMLDocument
第01引数(略可) | Object | XML 型に変換可能なソースを指定 |
戻り値 | XML | 新しい XML オブジェクトが得られる |
■第01引数 ソース
「XML 文字列」を渡します。
XML 文字列は、XML フォーマットとして正確である必要があります。
閉じタグが無いなどの不備がある場合、パースは失敗します。
■戻り値
成功すると、XMLNode オブジェクトによるツリーが構築されます。
戻り値の XMLDocument オブジェクトは、ルートの要素に相当します。
■作成例
XMLDocument オブジェクトを作成する
import flash.xml.XMLDocument;
// ------------------------------------------------------------
// XMLDocument 文字列を用意する
// ------------------------------------------------------------
var text_xml:String =
'<?xml version="1.0" encoding="UTF-8"?>\n' +
'<ルート>\n' +
' <要素A 属性名="属性値A">テキストA</要素A>\n' +
' <要素B 属性名="属性値B">テキストB</要素B>\n' +
' <要素C 属性名="属性値C">テキストC</要素C>\n' +
'</ルート>';
// ------------------------------------------------------------
// XMLDocument オブジェクトを作成する
// ------------------------------------------------------------
var xml_document:XMLDocument = new XMLDocument(text_xml);
// 出力テスト
trace(xml_document);
XMLDocument オブジェクトを作成し、XML 文字列をパースする
import flash.xml.XMLDocument;
// ------------------------------------------------------------
// XML 文字列を用意する
// ------------------------------------------------------------
var text_xml:String =
'<?xml version="1.0" encoding="UTF-8"?>\n' +
'<ルート>\n' +
' <要素A 属性名="属性値A">テキストA</要素A>\n' +
' <要素B 属性名="属性値B">テキストB</要素B>\n' +
' <要素C 属性名="属性値C">テキストC</要素C>\n' +
'</ルート>';
// ------------------------------------------------------------
// XMLDocument オブジェクトを作成する
// ------------------------------------------------------------
var xml_document:XMLDocument = new XMLDocument();
// 空白改行タブなどの整形文字を除外する
xml_document.ignoreWhite = true;
// XML 文字列をパースする
xml_document.parseXML(text_xml);
動画ファイルを読み込む
サンプルをダウンロード
■動画ファイルを読み込む
■ NetStream クラスについて
動画ファイルを再生するには、NetStream クラスを使用します。
動画ファイルを読み込んで、再生制御する事ができます。
NetStream クラスについては、こちらで解説しています。
■ Video クラスについて
動画を表示するには、Video クラスを使用します。
表示に関する制御ができます。
Video クラスについては、こちらで解説しています。
■使用例
外部にある動画ファイルを読み込んで、再生する
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
// ------------------------------------------------------------
// Video オブジェクトを作成
// ------------------------------------------------------------
var video_obj:Video = new Video();
// 位置とサイズ
video_obj.x = 10;
video_obj.y = 10;
video_obj.width = stage.stageWidth - 20;
video_obj.height = stage.stageHeight - 20;
// ステージに配置
stage.addChild(video_obj);
// ------------------------------------------------------------
// NetConnection オブジェクトを作成
// ------------------------------------------------------------
var net_connection:NetConnection = new NetConnection();
// 動画ファイル再生用の設定
net_connection.connect( null );
// ------------------------------------------------------------
// NetStream オブジェクトを作成
// ------------------------------------------------------------
var net_stream:NetStream = new NetStream(net_connection);
// ------------------------------------------------------------
// ビデオと NetStream を関連付け
// ------------------------------------------------------------
video_obj.attachNetStream(net_stream);
// ------------------------------------------------------------
// リスナー用オブジェクトを渡して、リッスンを開始(ここではエラー回避用のダミー)
// ------------------------------------------------------------
net_stream.client = { onMetaData:function ():void{} };
// ------------------------------------------------------------
// URL を指定して、ストリーム再生を開始する
// ------------------------------------------------------------
net_stream.play ( "http://example.com/video/test.flv" );
バイナリファイルを読み込む
サンプルをダウンロード
■ URLLoader クラスについて
■ URLLoader クラスについて
外部ファイルを読み込むには、URLLoader クラスを使用します。
URLLoader クラスについては、こちらで解説しています。
■バイナリファイルを読み込む
1.ByteArray 型を、読み込むデータ型に指定する
2.外部ファイルの読み込みを開始する
load() メソッドを使用します。
3.読み込みが完了したか調べる
こちらで解説しています。
4.読み込んだデータを取得する
data プロパティを使用します。
■バイナリファイルを読み込む例
バイナリファイルを読み込む
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.utils.ByteArray;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
// ------------------------------------------------------------
// URLLoader オブジェクトを作成する
// ------------------------------------------------------------
var url_loader:URLLoader = new URLLoader();
// ------------------------------------------------------------
// 読み込みに成功すると実行されるイベント(レスボンス結果の取得可能)
// ------------------------------------------------------------
url_loader.addEventListener( Event.COMPLETE , function (e:Event):void{
// レスポンスボディを取得する
var response:ByteArray = url_loader.data as ByteArray;
// 出力テスト
trace(response);
});
// ------------------------------------------------------------
// 読み込みに失敗すると実行されるイベント
// ------------------------------------------------------------
url_loader.addEventListener( IOErrorEvent.IO_ERROR , function (e:IOErrorEvent):void{
trace("HTTP 通信失敗");
});
// ------------------------------------------------------------
// 読み込みに失敗すると実行されるイベント (セキュリティ関連)
// ------------------------------------------------------------
url_loader.addEventListener( SecurityErrorEvent.SECURITY_ERROR , function (e:SecurityErrorEvent):void{
trace("HTTP 通信失敗(原因はセキュリティ)");
});
// ------------------------------------------------------------
// 受信フォーマットを設定
// ------------------------------------------------------------
url_loader.dataFormat = URLLoaderDataFormat.BINARY;
// ------------------------------------------------------------
// URLRequest オブジェクトを作成する
// ------------------------------------------------------------
var url_request:URLRequest = new URLRequest("http://example.com/download/binary.dat");
// ------------------------------------------------------------
// 読み込みを開始する
// ------------------------------------------------------------
url_loader.load(url_request);
■外部ファイル読み込みのセキュリティについて
■クロスドメインポリシーについて
別ドメインにある、外部ファイルを読み込む事はできません。
■クロスドメインポリシーの解除について
こちらで解説しています。