Flashはブラウザに依存しない!!って思っていたいが、
SWFObject v2.1を使用し、stage.stageWidthやstage.stageHeightを
取得しようとした時にどうもFirefoxにて上手く取得できない。
ということで
テスト
してみた。
FirefoxとSafariでの結果
Firefox
Safari

実行したactionscript
package {import flash.display.Sprite;import flash.events.Event;import flash.text.TextField;import flash.text.TextFieldAutoSize;[SWF(backgroundColor="0xFFFFFF",frameRate="30",width="640",height="480")]public class stageTest extends Sprite{private var _tf:TextField;public const STAGEADDCHILD:String = "stageaddchild";public function stageTest(){_tf = new TextField();//_tf.multiline = true;_tf.autoSize = TextFieldAutoSize.LEFT;//_tf.wordWrap = false;addChild(_tf);addEventListener(Event.ADDED_TO_STAGE , addStageHandler);addEventListener(Event.ENTER_FRAME , enterframeHandler);addEventListener(this.STAGEADDCHILD , stageAddChildHandler);}private function addStageHandler(e:Event):void {var str:String = _tf.text;str += "Event.ADDED_TO_STAGE --" + "stageWidth = "+ stage.stageWidth + " -- " + "stageHeight = " + stage.stageHeight + "\r";_tf.text = str;}private function enterframeHandler(e:Event):void {var str:String = _tf.text;str += "Event.ENTER_FRAME --" + "stageWidth = "+ stage.stageWidth + " -- " + "stageHeight = " + stage.stageHeight + "\r";_tf.text = str;if(stage.stageWidth>0) {removeEventListener(Event.ENTER_FRAME , enterframeHandler);dispatchEvent(new Event(STAGEADDCHILD));}}private function stageAddChildHandler(e:Event):void {var str:String = _tf.text;str += "stageOK";_tf.text = str;}}}
結果を踏まえて
Event.ADDED_TO_STAGEでイベント待ちすればOKとか、 Event.ENTER_FRAMEを一回ループすればOKと思っていたのですが、 どちらもダメのようです。
stage.stageWidthが取得できるまで待ち、dispatchEventしたほうがよさげ。
SWFObject v2.1の問題な気もしますが、みんなどういう対処しているのかな。。









comments