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
cheers for the actual article i've recently been on the lookout with regard to this kind of advice on the net for sum time proper now so numerous thanks
Rattling great visual appeal on this web site, I'd value it 10.