« this.stage.loaderInfo.url | Home | Crimson再始動 »

Mar 262008

img8.Document

昨日から諸々うにゃうにゃやっていたものを晒してみます。
突っ込みどころ満載だと思いますが・・・汗


目的は
・stand aloneモードなのかcomplex mode?なのかで動作を切り分けたい(開発過程において)
・as2で言うところの_rootを取得したい。
・実行環境がサーバ(http or https)かローカルなのかを取得したい。
・DisplayObject以外でもstageを参照したい。
と言うところ。


使い方はDisplayObjectで、

import img8.Document;
Document.isRoot(this);
といった感じで実行すると、そのDisplayObjectの含まれるswfが最上位である場合rootとstageが格納。それ以降読み込まれた外部swfでisRootがcallされてもreject(多分)。


ただし一番親のswfでisRootが実行されていないと、errorをthrowします。
なので、とりあえず一番親になるswfでは実行必須になってしまっています。
(ここを子供からでも解決できるように悪戦苦闘していました)


用意されているmethod,propertyは以下のとおり。

isRoot(displayInstance:DisplayObject):Boolean
displayInstanceがrootに相当するか否か?相当する場合Documentクラス内にrootとstageが定義されます。親であった場合true。

root:DisplayObject [read-only]
最上位のdisplayObjectを戻す。

stage:Stage [read-only]
ステージクラスを戻します。一応これ経由でlistener登録、削除できますので、DisplayObject以外でonResizeを取得することも可能なはず。

url:String [read-only]
最上位のswfのURLを戻します。まぁ特に使うことはないかと。

isLocal:Boolean [read-only]
動作環境がローカルかサーバ上(http or https)で動作しているか?これでローカル開発モード、サーバモードの切り替えなどを行えるかと・・。

っつーようなかんじです。理想は親swfでisRootしないで、子swfから実行してもroot,stage,urlなどが取得できるのが理想なんですが、うまくいかない・・・。出来そうな気だけしているのですが、実力が追いついていません・・。

package  img8{
	import flash.display.DisplayObject;
	import flash.display.Stage;		
	public class Document{
		private static var _ROOT:DisplayObject;
		private static var _STG:Stage;
		public static function isRoot(_r:DisplayObject):Boolean
		{
			if (!_r.stage) {
				throw(new Error("this Object has not added yet. please addChild this displayObject"));
				return false;
			}
			var root = _r.stage.root as DisplayObject;
			var mine = _r.root.parent as DisplayObject;
			var flgIsRoot = (root == mine);
			if (flgIsRoot) 
			{
				_ROOT = _r as DisplayObject;
				_STG = _ROOT.stage;
				return true;
			}
			return flgIsRoot;
		}
		public static function get root():*
		{
			if (!_ROOT) 
			{
				throw(new Error("still not defined documentRoot"));
				return null;
			}
			return _ROOT;
		}
		public static function get stage():Stage
		{
			if (!_STG) 
			{
				throw(new Error("still not defined documentRoot"));
				return null;
			}
			return _STG;
		}
		public static function get url():String
		{
			if (!_ROOT) 
			{
				throw(new Error("still not defined documentRoot"));
				return null;
			}
			return _ROOT.loaderInfo.url;
		}
		public static function get isLocal():Boolean
		{
			if (!_ROOT) 
			{
				throw(new Error("still not defined documentRoot"));
				return false;
			}
			if (_ROOT.loaderInfo.url.indexOf("http://") == 0) return false;
			if (_ROOT.loaderInfo.url.indexOf("https://") == 0) return false;
			return true;
		}
	}
}
突っ込みお待ちしております(誰

4 Comments

ギャー、はみ出した部分が見えない・・・汗
CSS嫌いだ。アホウ。

styles-site.cssに、この3行を追加すれば見えるようになりますYO!

.entry{
overflow: visible;
}

あ、ありがとうございます。
やってみるっす。
もうCSSとかClient Server Systemの略じゃないか?ってぐらい分かりません・・・・はぁ。

見えるようになったけど、はみ出た・・・w

Leave a comment

Search and Archives