Jan 20 2012

Adobe Flash – Important Bug – RSL & FlashVars

Tag: Actionscript,Adobe,Adobe Flash - bug or feature,AllgemeinKonstantin Elstner @ 09:16

Seit Adobe im Jahr 2010 Flash Professional CS5 vorgestellt hat, kommt es immer wieder zu einem aufttretenden Bug.
Die Möglichkeit FlashVars auszulesen existiert schon fast seit der Jahrtausendwende, Adobe scheint es aber zu lieben Entwicklern immer wieder Steine vor die Füße zu werfen, auch bei den FlashVars ist es nicht anders. Normalerweise sollten diese wie folgt auslesbar sein:

loaderInfo.parameters.xmlPath

Diese Codezeile würde die Variable „xmlPath“ wenn gesetzt auslesen.

Seit Flash CS5 kann es aber passieren das eben dieser Code „undefined“ zurück gibt, obwohl die Variable korrekt von außen gesetzt ist. Ein Umstand, der so gut wie jeden Entwickler in den Wahnsinn treiben kann.

Sollte das auslesen wie oben beschrieben einmal nicht funktionieren sollte man entweder:

parent.loaderInfo.parameters.xmlPath

oder wenn dies auch nicht zum Ziel führt:

parent.parent.loaderInfo.parameters.xmlPath

probieren.

 

Alternativ geht auch der Zugriff über root oder stage:

Global.xmlPath = root.loaderInfo.parameters.xmlPath

oder

Global.xmlPath = stage.loaderInfo.parameters.xmlPath

 

Warum dies notwenig ist?

Adobe hat mit Flash CS5 auch für die IDE das RuntimeSharedLibrary Feature eingeführt (kurz RSL), diese Technik kommt aus dem Flex Bereich und wird ua. für das TextLayoutFramework verwendet. Mit Hilfe von RSL können einzelne Klassen in SWZ Dateien gepackt werden, diese werden gesondert signiert und der User muss nicht zB. bei jedem Flex Anwendungsaufruf das komplette Flex Framwork laden, sondern nur die vom Entwickler integrierten Erweiterungen. Dies spart Traffic und kann auch in eigenen Klassen verwendet werden. Weitere Infos gibt es unter http://help.adobe.com/de_DE/FlashPlatform/reference/actionscript/3/fl/rsl/package-detail.html.

Damit die generierte SWF die bereitstehenden RSL-Dateien vor der eigentlichen Anwendung laden kann integriert Adobe automatisch einen RSL-Preloader. Da man bei Adobe stellenweise wohl nicht so viel Wert auf QM legt hat sich in diesem Preloader ein Bug eingeschlichen, der eben die Übergabe, bzw. die Weiterleitung der FlashVars verhindert, daher der Workaround via parent.loaderInfo.

Adobe ist über den Bug informiert, hat diesen aber auch in die Version CS5.5 übernommen, bleibt zu hoffen er wird in CS6 endlich gefixt, denn selbst ein unabsichtliches anlegen eines TLF basierenden Textfeldes in der IDE ruft die fehlerhafte RSL-Preloader-Mechanik auf die Tagesordnung.

http://forums.adobe.com/thread/644057