URL で指定した場所から文字列をロードする

(サンプル一覧を表示する)

これは、URL で指定した場所から文字列をロードするサンプルです。

画像のロード時は Loader というクラスを使って URL で指定された場所から
データをロードしますが、文字列やバイナリデータの場合、
URLLoader というクラスを使ってデータをロードします。
Flash のセキュリティチェックの関係で、同じドメイン内に設置されたデータしか
ロードすることはできません。それを回避するには、crossdomain.xml を設置するか、
サーバ上の PHP プログラム等を使って、他のサーバのデータをロードしてください。

文字列をロードする時には、エンコードが UTF-8 になっているか確認してください。
それ以外の文字列は、Flash ではそのまま表示することはできません。

また、TextField に文字列をロードする時は、CR も LF も改行として認識されてしまうので、
Windows のエディタを使った場合等、空白行が 1 行ごとに付いてしまうことがあります。
エディタの設定で、CR または LF のどちらか 1 つだけを改行コードに指定してください。
それができない場合は、Flash 上で、正規表現などを使って \r\n にマッチしたら
\n に置き換える というようなコードを入れることで空白行が入ってしまう問題を回避することができます。

サンプルのロード元の URL は、
http://hkpr.info/flash/game/sample/urlloader_test.txt
です。
Flash の実行画面
URL で指定した場所から文字列をロードする

Flashプレーヤーが入っていないか、JavaScriptが無効になっているようです。

Get Adobe Flash player

URL で指定した場所から文字列をロードする

ソースコード

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.text.TextField;
	
	/**
	 * URL で指定した場所から文字列をロードするサンプル
	 * @author Hikipuro
	 */
	public class Main extends Sprite 
	{
		/**
		 * 結果表示用テキストフィールド
		 */
		private var textField:TextField;
		
		/**
		 * URL からデータをロードするオブジェクト
		 */
		private var urlLoader:URLLoader;
			
		/**
		 * コンストラクタ
		 */
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		/**
		 * 初期化メソッド
		 * @param	e
		 */
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			// テキストフィールドの準備
			textField = new TextField();
			textField.width = 320;
			textField.height = 240;
			addChild(textField);
			
			// URL リクエストの準備
			var urlRequest:URLRequest = new URLRequest("urlloader_test.txt");
			
			// URL ローダの準備
			urlLoader = new URLLoader();
			urlLoader.addEventListener(Event.COMPLETE, onLoadComplete);
			
			// URL からデータをロードする。
			// (ロード完了時に、onLoadComplete メソッドが呼び出される。)
			urlLoader.load(urlRequest);
		}
		
		/**
		 * URL ローダの、ロード完了イベント
		 * @param	e
		 */
		private function onLoadComplete(e:Event):void 
		{
			// テキストフィールドにロードしたデータの内容を入れる
			textField.text = (urlLoader.data as String);
		}
	}
	
}
		

SWF が置かれているドメインとは違うドメインのテキストファイルをロードする時は、
テキストファイルが置かれているサーバのルートに、 crossdomain.xml という
名前のファイルを設置し、その中に Flash Player からのアクセスを許可する
サーバの名前を規則通りに書いておく必要があります。

例えば、sample.com というドメインにテキストファイルが置かれているとすると、

http://sample.com/crossdomain.xml

という URL でアクセス可能な場所に、crossdomain.xml を設置します。

crossdomain.xml の中身は、

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="www.friendOfFoo.com"/>
<allow-access-from domain="*.foo.com"/>
<allow-access-from domain="105.216.0.40"/>
</cross-domain-policy>

のように書きます。
allow-access-from タグの domain 属性に、許可するサーバの名前を書きます。
* のようなワイルドカードも使用できるそうですが、
* のみの指定はやめた方が良いと思います。

参照

外部リンク