StageサイズがSWFForceSizeのコンテンツサイズに追随しない
- 2009 年 5月 7 日
画面の最小サイズを制御してくれる便利ものの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でコンテナサイズを指定するので、1pxでも大きかったり、小さかったりするとスクロールバーが表示されたり、隙間が出来たりするはず。環境毎にJavaScriptで取得するウインドウサイズに際が出てくる可能性はありですが、問題があればブラウザ毎に分岐かけたりって話になるのかなぁ。
環境を記録。Mac/Safari/バージョン 3.2.1 (5525.27.1)
追記。この方法、IE8でウインドウサイズを変更した時、固まるので分岐が必要そう。
Safari4だとこの対応をしなくてもリサイズされるので、Safari3固有のバグっぽいですね。
コメントをどうぞ