StageサイズがSWFForceSizeのコンテンツサイズに追随しない

  • 2009 年 5月 7 日
  • kosuke

画面の最小サイズを制御してくれる便利もののSWFForceSizeですが、SafariだとSWFForceSizeの変更するコンテンツサイズまでステージサイズが追随しないことがあったのでメモ。

症状としては、Safariで設定した最小サイズ幅以下のまま、高さを変更してもステージサイズが変化しない。IEやFirefoxでは無事変化している模様。


これでどう困ったかというと、こういう事が起きる。

伸びない。

検証にリサイズした時のFlashのステージサイズと、swfforcesizeがコンテナに指定しているサイズを表示してみました。
リサイズした時はswfforcesize.jpのonResizeDivメソッドが動くので、このメソッドの最後にExternalInterface経由でFlashの関数を実行する記述を加え各サイズを表示。

swfforcesize.js

onResizeDiv: function()
{
	var winSize = this.getWinSize();
	var w = winSize.width < this.minW? this.minW+"px" : "100%";
	var h = winSize.height < this.minH? this.minH+"px" : "100%";
	/*
	 for IE on PC, turn off the disabled scrollbar 
	 on the right when there's no content to scroll
	*/
	if( document.all ) document.body.scroll = ( w!="100%" || h!="100%" )? "auto" : "no";
	document.getElementById( this.div ).style.width = w;
	document.getElementById( this.div ).style.height = h;
	document.getElementById("external_flashcontent").onResizeDiv();
}

as

public function onResizeDiv(w:String, h:String):void{
  var t:String = "Flash | StageWidth: " + this.progression.stage.stageWidth + " / StageHeight: " + this.progression.stage.stageHeight + "\n";
        t += "SWFForceSize | w: " + w + " / h: " + h;
        field.text =  t;
}

» 実際に動いているのがこちら。

これを見る限り、コンテナの幅が最小サイズで固定された後、コンテナの高さにステージが追随しないっぽい。高さが固定された後の幅には追随しているのだが。

この症状、コンテナのサイズ指定の単位を%からpxに変更したらSafariでも追随するようになった。

swfforcesize.js

onResizeDiv: function()
{
	var winSize = this.getWinSize();
	var w = winSize.width < this.minW? this.minW+"px" : winSize.width+"px";
	var h = winSize.height < this.minH? this.minH+"px" : winSize.height+"px";
	/*
	 for IE on PC, turn off the disabled scrollbar 
	 on the right when there's no content to scroll
	*/
	if( document.all ) document.body.scroll = ( w!="100%" || h!="100%" )? "auto" : "no";
	document.getElementById( this.div ).style.width = w;
	document.getElementById( this.div ).style.height = h;
	document.getElementById("external_flashcontent").onResizeDiv();
}

» px指定で実際に動いているのがこちら。

他のブラウザでも動いているようなのだけれど不安もある。
pxでコンテナサイズを指定するので、1pxでも大きかったり、小さかったりするとスクロールバーが表示されたり、隙間が出来たりするはず。環境毎にJavaScriptで取得するウインドウサイズに際が出てくる可能性はありですが、問題があればブラウザ毎に分岐かけたりって話になるのかなぁ。

環境を記録。Mac/Safari/バージョン 3.2.1 (5525.27.1)

“StageサイズがSWFForceSizeのコンテンツサイズに追随しない” に 1 件のコメント

  1. Gravatar Icon kosuke より:

    追記。この方法、IE8でウインドウサイズを変更した時、固まるので分岐が必要そう。
    Safari4だとこの対応をしなくてもリサイズされるので、Safari3固有のバグっぽいですね。

  2. コメントをどうぞ