カテゴリー
未分類

this.stage.loaderInfo.url

勘違いなのかよくわからないのだけど、
mother.swf
.swf
という二つのSWFがあって、mother.swfがchild.swfをloadするとします。で、このときにchild.swfの方で
trace(this.stage.loaderInfo.url)するとmother.swfのURLが出てくるのだと思っていたのだけど、なんかちょっと予想していない結果になってはまり中。
たとえばmother.swfに

とすると両方とも”motehr.swf”の値が出る。これはなし。
続けてmother.swfからchild.swfを読み込みルートムラインにaddChild。
で、child.swfの中で

を実行すると両方とも”child.swf”となる。
(期待していた値はL1=”child.swf”,L2=”mother.swf”)
ただし、読み込む前になんかしらを実行したりすると(明確にそれが何か不明だけど、今作っているカスタムクラスを定義すると)きちんと(L1=”child.swf”,L2=”mother.swf”)の値がでる。
なんか根本的に理解が間違っているのか?


追記:2008/03/25 23:42
あ、しかも”mother.swf”のwidthを500にして、”child.swf”を100にしたとしても
“child.swf”で

とかでてくる・・・。
loaderInfoの使い方がまちがっとるんか?
追記:2008/03/26 0:02
ちなみに

も駄目であります。
なんじゃこりゃ?
追記:2008/03/26 0:10
graffiti-blog: AS3において、自身がルートかどうかを調べる
で用いられている

も駄目だ・・。
なんだ?オデのFlashがおかしいのか?
追記:2008/03/26 0:49
“mother.swf”の方から、.COMPLETEで
trace(“#4”,e.target.content.stage.loaderInfo.url);
するときちんと取れる。
しかし”child.swf”の方では
trace(“stage=”,stage.loaderInfo.url);
は”child.swf”。
うう・・・・(汗
追記:2008/03/26 1:16
もうよく分からないのだけど、mother.swfで一度外部のstatic methodを通して
trace(“stage = “,_r.stage.loaderInfo.url);
をして(何も変数には格納しない)、そのあと読み込まれた”child.swf”で同じstatic methodをCALLすると
trace(“stage = “,_r.stage.loaderInfo.url);
//mother.swf
を戻す。
なんで~~~?
追記:2008/03/26 1:23
あ!もしかして?!
追記:2008/03/26 1:39
ApplicationDomainの問題かと思ってときめいたけど
違った・・。
追記:2008/03/26 4:26
もうakihiro kamijo: Stage クラスいてあるthis.stage.rootがドキュメントルートを意味するとか嘘なんだろうな・・・。いやし示しているのだろうけど、loaderInfoがおかしいんだろうな・・。
っつーことはあれか?外部SWFからRootは一方的に参照できないということなのか?
親の方で一度定義しろと?(別にいいけどさ)
最後にちょっと力技ためしてみようっと・・。
追記:2008/03/26 4:52
こんなん走らせて上までたどってみたけど、結局loaderInfo.urlは”child.swf”を戻してきやがった・・・。

アホか!って俺がアホなのか?ごめんなさい。
追記:2008/03/26 5:52
結局全SWFで定義する方向で。
ただ一応判定条件を入れて、自動的にrootなのかそうじゃないのかを切り分ける方向で実装。これでシングルトン系SWFも単独動作のときはrootとして動作するようにした。あとはstage系の操作もプロパティ経由で参照して出来るようにしてみた。これでとりあえずDisplayObjectでないものからもrootとstage参照できるようになった。ポコポコ。

「this.stage.loaderInfo.url」への6件の返信

こんにちわー。
もしかして取得されたいのはこれですか?
loaderInfo.loaderURL;
それと Flash IDE で設定したステージサイズを取得したい場合は stage.stageWidth ではなくて、loaderInfo.width でいけますよー。

毎度色々情報ありがとうございます。
loaderInfo.loaderURL;
はその読み込み命令を出したSWFのURLなのでこれもちょっと片手落ちな感じなんです。どんなに入れ子でloadしてもそこからas2でいう_rootを参照できないか?と・・・(最近複数人での開発が多くて、その辺クラスを共有しなくても_root参照でやり取りができる方法が欲しいんです・・。(それぞれをつなぐClassを作れば良いのですが、それすら作る時間が無かったり・・)
あとステージサイズは大丈夫であります。stage.loaderInfo.urlとstage.stageWidthがずれてるのは何でだろ?って思っただけなので・・stage.loaderInfoがrootの情報を返すと思ってなかったので・・。
やりたいのは子供SWFから親の完全なる参照であります。

こんにちわー。
同じドメイン上に存在するファイルであれば、普通に子の loaderInfo.loader.root や loaderInfo.loader.stage で取得できますよー。
ただし条件としては、親の Loader 自体が事前に addChild() されていないとダメですね。
Loader ではなくて loader.content を addChild() しているとアクセス不可になってしまうようです。

おはようございます、寝てましたw
>同じドメイン上に存在するファイルであれば、普通に子の loaderInfo.loader.root や loaderInfo.loader.stage で取得できますよー。
ほう、ちょっとやってみまっす。これ同じドメインじゃない場合はapplicationDoaminとsecurityの問題をクリアすればアクセスできるんですかね?ま、ちょっとやってみます。
>Loader ではなくて loader.content を addChild() しているとアクセス不可になってしまうようです。
うぉ・・なんだその仕様は・・・汗 んんん?
ま、ちょっとやってみますです~~。
ありがとございますー。

やってみました。
確かに
this.loaderInfo.loader.root
this.loaderInfo.loader.stage
でルートにアクセスできるようです。ただこれらのloaderInfo.urlを参照すると自分のURLが戻ってきますね。LoaderをaddChildしているので、そのloaderInfoを継承しているのでしょうけど・・。なんかこの仕様腑に落ちないw
ちなみに
>Loader ではなくて loader.content を addChild() しているとアクセス不可になってしまうようです。
に関しては
loadのタイミングで直接
this.addChild(shareLoader);
だと問題ないですが、
EVENT.COMPLETE
のタイミングで
this.addChild(event.target as Loader);
とすると駄目っぽいですね。(as MovieClipも当然駄目ですが)
contentにした時点でloaderInfoが外れてしまっているような気もするのですが、こうなってくるとloaderInfoってなんじゃらほいと・・・・・。
_rootのswfのURLって取得できないものなんですかね?
なんか他のクラスにあるのかしら?

taka:niumさん
色々ありがとうございました。
一応クラスにまとめてみましたです。http://blog.img8.com/archives/2008/03/003678.html

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です