Chyba v Internet Exploreru – stageWidth = 0 a stageHeight = 0
22.02.2009
Včera jsem se na chvíli poněkud zaseknul na super chybě v Internet Exploreru, konrétně veri pro Windows Vista – IE7 7.0.6001.1800. Projevuje se tak, že Flashový objekt má po načtení celého obsahu nulovou výšku a šířku i když samozřejmě tyto velikosti nulové nemá.
Chyba se projevovala hned po načtení Flashe, když už byl zavolán konstruktor třídy dokumentu. Hned při inicializaci jsem pozicoval objekty v rámci flashe a vzhledem k tomu, že jak
stage.stageWidth tak
stage.stageHeigth vracela hodnotu 0, tak se opravdu špatně pozicovalo v dokumentu nulové velikosti.
Řešení je jednoduché a na snadě, prostě počkat.
Viz
package { import flash.display.MovieClip; import flash.utils.Timer; import flash.events.TimerEvent; class Trida extends MovieClip { private var inicTimer:Timer; public function Trida() { super(); if (stage.stageWidth == 0 || stage.stageHeight == 0) { // zjistili jsme chybu, velikost nemuze byt 0 // vyrobime timer objekt inicTimer = new Timer(100, 1); // navazeme na listener inicTimer.addEventListener(TimerEvent.TIMER, runInicApp); // pustime inicTimer.start(); } else { // pokud je vse v poradku, rovnou naincializueje aplikaci inicApp(); } } private function runInicApp(e) { // spustime opozdenou inicializaci inicApp(); } private function inicApp() { // vlastni inicializace aplikace, ted uz je vse v poradku } } }
Na závěr bych chtěl poděkovat Billu Gatesovi a popřát mu, at shnije v pekle ![]()
Snad tímhle někomu uštřím bezesnou noc.