Es gibt eine Eigeneart in Flash Player 9 und höher, welches mehrere FSCommands oder getURL Aufrufe nicht zulässt.
Damit man diese Eigenart aber genauer versteht möchte ich dies anhand ein paar Beispiele genauer erklären.
Einfache Beispiele
Anbei ein paar einfach Beispiel woran diese Eigenart besser erklärt werden kann.
getURL("http://flash.area-network.de", "_blank");
getURL("http://animearchive.de", "_blank");
navigateToURL(new URLRequest("http://flash.area-network.de"), "_blank");
navigateToURL(new URLRequest("http://animearchive.de"), "_blank");
fscommand("fullscreen", "true");
fscommand("allowscale", "true");
Wer diese Beispiele in Adobe Flash 8 und niedriger wird feststellen, das immer beide Aktionen ausgeführt werden.
Es werden also beide URLs geöffnet oder aber die Flashdatei startet in Vollbildmodus und lässt sich in der Größe ändern.
Werden die Beispiele jedoch in Adobe Flash 9 und höher getestet, so wird nur die letzte Aktion ausgeführt.
Erklärung
Der Flashplayer 9 und höher, lässt keine Aufrufe mit den selben Parametern zu. Hierbei spielt nicht der erste Parameter eine Rolle sonder der 2 Parameter warum auch immer ^^°.
Anbei ein weiteres Beispiel um dies genauer zu erklären.
getURL("http://flash.area-network.de", "_top");
getURL("http://animearchive.de", "_blank");
navigateToURL(new URLRequest("http://flash.area-network.de"), "_top");
navigateToURL(new URLRequest("http://animearchive.de"), "_blank");
Das obere Beispiel öffent wie gewünscht die beiden URLs über Flash, der einzige Unterscheid ist der 2 Parameter.
Beeinflussung von FSCommands
FSCommands werden nicht wie die meisten denken als FSCommands abgespeichert, sondern als getURL Aufruf.
Der ByteCode von FSCommands und GetURL Aufrufen sieht also gleich aus, anbei 3 Beispiele die alle das selbe bewirken.
FSCommand("fullscreen", "true");
getURL("FSCommand:fullscreen", "true");
navigateToURL(new URLRequest("fscommand:fullscreen"), "true");
Die Screibweise fscommand(...) ist also nur eine Abkürzung, die beim kompilieren in eine SWF Datei in einem getURL Aufruf umgewandelt wird.
Aus diesem Grund sind FSCommand von diesem Verhalten genauso betroffen wie normale getURL aufrufe.
Lösungen
Es gibt hier nicht sehr viele Lösungen, jedoch eine Übersicht der gängisten Lösungen.
Groß- und Kleinschreibung ändern
Da Adobe Flash seit längeren Case Sensetiv ist, kann man mit Groß- und Kleinschreibung dieses Verhalten umgehen.
fscommand("fullscreen", "true");
fscommand("allowscale", "TRUE");
Dies funktioniert natürlich nur wenn hier auch ein Text als Argument übergeben wird. Auch müssen bei eigene definierte FSCommands darauf geachtet werden, das diese Groß- und Kleinschreibung auch unterstützt wird.
Variable Namen
Eine andere Lösung besteht darin, Variablen anstatt Text für die Argumente zu verwenden, was im normal Fall aber mehr ActionScript Code erzeugt.
var fs1_param = 'true';
var fs2_param = 'true';
fscommand("fullscreen", fs1_param);
fscommand("allowscale", fs2_param);
Diese Lösung bringt also den gewünschten Effekt jedoch muss mehr ActionScript geschrieben werden.
Parameter kombinieren
Eine andere Lösung besteht darin entsprechende Parameter zusammen zu fassen, dies kann bei einer Größenänderung sogar vom Vorteil sein.
fscommand("set_size", width, height);
anstatt:
fscommand("set_width", width);
fscommand("set_height", height);
Sollten hier zwei FSCommands verwendet werden und sollte das Object die selbe Höhe wie Breite haben wird einer der beiden FSCommands ignoriert.
