Dynamische Flash-Object Größe mit Flex und externalInterface
Bei Flex Standalone-Apps ist es meist nicht erforderlich eine entsprechende absolute Größe des swf-objects innerhalb des Browsers vorzugeben. Große Applikationen laufen oft in 100% des Browserfensters. Will man allerdings ein Hybrid-Projekt realisieren, indem die swf-Datei dynamisch mit Daten versorgt wird, ist es manchmal notwendig auch demenentsprechend dynamische Größen für das einzubettene swf-Objekt zu generieren und zu übergeben.
Beispiele für solche Einsatzgebiete wären z.B. Gallerien, die sich nach unten erweitern umso mehr Bilder per xml geladen werden. Da mir vorher nicht bekannt ist, wie viele Bilder eingepflegt wurden, kann ich vorher auch nicht abschätzen ob die swf-Datei nun beispielsweise 500 x 1000 Pixel groß ist, oder nur 500 x 500.
Das folgende kleine Beispiel zeigt, wie sich so ein Fall dynamisch per externalInterface-Klasse und JavaScript lösen lässt.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="500" creationComplete="init()">
<mx:Script>
<![CDATA[
public function init():void {
var appHeight:int = bild1.height + bild2.height + 50;
bild2.y = bild1.height + 50;
if (ExternalInterface.available) {
ExternalInterface.call("applicationHeight", appHeight);
}
}
]]>
</mx:Script>
<mx:Image source="@Embed('images/1.jpg')" id="bild1" />
<mx:Image source="@Embed('images/2.jpg')" id="bild2" />
</mx:Application>
In diesem Fall habe ich zwei Bilder platziert, dessen beiden Größen (plus 50 pixel Abstand) ich mit der Methode “ExternalInterface.call()”in mein Javascript übergebe.
function applicationHeight(size) {
document.getElementById("externalInterface").style.height = parseInt(size)+"px";
}
So schaut meine JavaScript Funktion aus, die innerhalb der html-Datei definiert ist. Im Prinzip wird hier lediglich das id-Element mit dem Namen “externalInterface” per css in seiner Height geändert. Man muss also darauf achten, dass das eingebettete swf-Objekt die richtige id bekommt.
In dem obrigen Fall ist die Anwendung von externalInterface für das Festlegen der Größe eigentlich nicht erforderlich, da man die fixe Größe vorher kennt. Es handelt sich nur um ein vereinfachtes Beispiel wie externalInterface dynamische Größen steuern kann.





















