勘違いなのかよくわからないのだけど、
mother.swf
child.swf
という二つのSWFがあって、mother.swfがchild.swfをloadするとします。で、このときにchild.swfの方で
たとえば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”の方から、Event.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