LiveConnect: Das Zusammenspiel von JavaScript und ActionScript
ActionScript ist wie bereits erwähnt aufgrund seiner Anlehnung an den ECMA-262-Standard JavaScript sehr ähnlich, so dass Macromedias Interesse eine Schnittstelle zu implementieren, welche eine Kommunikation zwischen beiden Scriptsprachen erlaubt, auf der Hand liegt. Diese Kommunikation ist grundsätzlich in beide Richtungen möglichen. So kann man sowohl mit ActionScript Funktionen aus JavaScript aufrufen, als auch mit letzterem einen Flash film durch Zugriff auf allgemeine vordefinierte Methoden von ActionScript steuern.Kommunikation von ActionScript mit JavaScript
ActionScript sieht für diese Richtung der Kommunikation die Aktionfscommand(Befehl, Argumente)
, mithilfe derer eine Nachricht an eine Scriptsprache wie etwa JavaScript gesendet werden kann, vor. Dies erklärt die auf den ersten Blick etwas eigenartige Funktionsweise der Aktion, welche also in Bezug auf Scriptsprachen recht vielseitig eingesetzt werden könnte.Die Aktion
fscommand
erwartet als Parameter zwei Ausdrücke, welche eine sehr speziell benannte JavaScript - Funktion im HTML-Dokument, in welchem der Flash film eingebettet ist, abfangen und verarbeiten kann. Die Signatur dieser Funktion muss dem Schema NameDes Flash films_DOFSCommand(Befehl, Argumente)
entsprechen, damit die in diese Richtung verlaufende Kommunikation zwischen beiden Scriptsprachen funktionieren kann. NameDes Flash films
entspricht dabei dem Namen des eingebundenen Flash players, welcher diesem mit dem Attribut name
des <object>
-Tags bzw. dem Attribut id
des <embed>
-Tags zugewiesen wurde. Diese Funktion in JavaScript sollte dann die gesendeten FSCommand
- Befehle, in einer geeigneten Form auswerten können. So ist es beispielsweise denkbar, dass durch unterschiedliche Befehle jeweils andere Anweisungen ausgeführt werden, wie es zum Beispiel durch ein switch-case
-Konstrukt realisierbar wäre. In einem HTML-Dokument, in welchem ein Flash film mit dem Namen myMovie
eingebunden ist, könnte daher folgendes JavaScript notiert werden:
<script language="JavaScript">
//JavaScript - Funktion mit spezieller Signatur
function myMovie_DoFSCommand(command, value)
{
switch(command)
{
case "a": alert(value); break;
case "b": alert(value); break;
default : alert("Kein entsprechender Befehl!"); break;
}
}
</script>
fscommand("a","Fall a")
ausgeführt werden, würde dies durch die JavaScript - Funktion abgefangen und Fall a
als Meldung im Browserfenster (alert
) ausgegeben werden.ActionScript stellt des Weiteren die Aktion
getURL("URL", [Location [, Variablen]])
zur Verfügung, welche den Browser im ursprünglichen Sinne veranlasst, die mit dem ersten Parameter definierteURLzu laden, wobei der optionale Parameter Location
, welcher den Frame definiert, in dem die URL geladen werden soll, im Übrigen folgende Werte erhalten kann:-
_self
:URLim gleichen Frame, in dem auch Flash film eingebunden ist, laden-
_blank
:URLin neuem Fenster laden-
_parent
:URLin übergeordnetem Frame laden-
_top
: URLin den obersten Frame ladenÄhnlich, wie man mit einem HTML-Link eine JavaScript -Anweisung auslösen und so etwa eine Funktion aufrufen kann, könnte man dies potentiell auch mit
getURL
bewirken. Ein Beispiel:
myButton.onRelease = function()
{
getURL("javascript:myFunction()","_parent");
}
myButton
in demjenigen Frame, welcher dem den Flash film einbindenden Frame übergeordnet ist, die JavaScript - Funktion myFunction
aufgerufen werden, so dass auch so ein Zusammenwirken von ActionScript und JavaScript in dieser Richtung erreicht werden könnte. Dies ist natürlich nicht im Sinne des Erfinders und funktioniert auch nicht mit allen Browsern.
Kommunikation von JavaScript mit ActionScript
Andersherum ist es auch möglich, mit JavaScript über die LiveConnect - Schnittstelle einige vordefinierte ActionScript-Methoden des im HTML-Dokument eingebundenen Flash films aufzurufen und damit die Wiedergabe des Flash films zu beeinflussen. Dazu muss JavaScript zunächst auf den Flash film zugreifen können. Marcomedia stellte dazu eine Variante vor, bei der auf den eingebundenen Flash film aufgrund der Tatsache, der dieser in der Objekthierarchie unter dem document-Objekt liegt, also im Allgemeinen mitwindow.document.Filmname
ansprechbar ist, zugegriffen werden kann. Der Aufruf eine der allgemeinen ActionScript-Methoden, wie sie Macromedia auf seiner Homepage zusammenstellt, erfolgt dann mit window.document.Filmname.Methode()
. Ein Beispiel:
with(window.document.myMovie)
{
SetVariable("myString","String");
GotoFrame(15);
Play();
}
SetVariable("Bezeichner","Wert")
der Variablen myString
im eingebundenen Flash film mit dem Namen myMovie
ein neuer Wert String zugewiesen. Anschließend wird der Flash film angewiesen, zu seinem 15. Bild zu wechseln und anschließend die Wiedergabe zu starten. JavaScript kann also auf diese Weise ActionScript beeinflussen.
Die Integration von LiveConnect
Die Kommunikations - Schnittstelle, wie sie bisher in ihrem Umfang implementiert werden konnte, ist bei weitem nicht auf jeder Plattform vollständig integriert. Das Dilemma, wie es sich im Prinzip schon bei der eher umständlichen und nicht W3C-konformen gängigen Einbettungsmethode von Flash filmen in HTML-Dokumente abzeichnet, setzt sich beim Thema des Browser-Scriptings fort. Die integrativen Verbindungen eben dieses LiveConnects sind so längst nicht bei allen Browsern auf den jeweiligen Plattformen gegeben. So ist beispielsweise bei Opera keine der erwähnten Kommunikationsmöglichkeiten anwendbar, wobei der eigentlich nicht zulässige Aufruf von JavaScript - Funktionen aus ActionScript mit der AktiongetURL
bei Opera nur für jene erfolgen kann, welche auch tatsächlich im gleichen Frame wie der eingebundene Flash film notiert sind.Der Zugriff von JavaScript auf den eingebetteten Flash film ist darüber hinaus - wie man bereits vermuten kann -nicht generell, sondern eher in Ausnahmefällen, über die von Macromedia vorgestellte Form
window.document.Filmname
möglich, was der Entwickler auch durchaus einräumt. Daher erscheint es notwendig, die Erkennung des Plugins flexibler zu gestalten, wobei sich etwa bei einigen Browsern wie dem Internet Explorer das all
-Objekt, bei anderen die Zugriffsmethoden auf ein HTML-Element getElementById()
, getElementByName()
, getElementsByTagName()
des document
-Objekts anbieten.
Kommunikation von ActionScript mit serverseitigen Scripts
Ein großes Potential von ActionScript liegt in der Möglichkeit, mit serverseitigen Scriptsprachen wie PHP , CGI oder ASP kommunizieren und mit ihnen Daten austauschen zu können. Durch die Erschließung derartiger Möglichkeiten ist dann auch eine Anbindung an Datenbanken, usw. möglich, was für die Integrativität von Flash von enormer Bedeutung ist.Variablen dynamisch aus einem serverseitigen Script laden
Die Schnittstelle zu serverseitigen Scripten beschränkt sich im Wesentlichen auf die Möglichkeit, Variablen aus diesen oder anderen externen Quellen, welche zum Beispiel diese generiert haben können, zu laden.Ein solcher Ladeprozess kann beispielsweise mit der Methode
loadVariables("URL" [ ,Variablen])
des Movieclip - Objekts angestoßen werden, wobei die Variablen in die Stufe bzw. Movieclipinstanz, welche die Methode aufruft, geladen, geparst und evtl. vorhandene Variablen überschrieben werden. Die Methode erwartet als ersten Parameter die URL des Scripts, welches die Variablen zurückgibt, oder der externen Datei, in welche die zu ladenden Variablen von einem serverseitigen Script geschrieben wurden. Mit dem zweiten, optionalen Parameter Variablen
kann wiederum eine Methode (POST oder GET) festgelegt werden, mit der die Variablen des Flash films an die Datei mit derURLaus erstem Parameter übergeben werden. Diese Datei sollte natürlich in der Lage sein, die via GET oder mit dem HTTP-Header via POST übergebenen Daten auswerten zu können.Die zu ladenden Variablen müssen in einem bestimmten Format, dem Standard-MIME-Format
application/x-www-form-urlencoded
, vorliegen, was heißt, dass die Variablen und zugehörigen Werte in der allgemeinen Form Variable=Wert
notiert werden und diese Paarungen jeweils durch ein kaufmännisches Und-Zeichen (&
) voneinander getrennt werden müssen. Zudem müssen Leerzeichen durch ein Pluszeichen (+
) ersetzt werden. Ein Beispiel, bei dem Variablen aus einer Textdatei geladen werden, deren Inhalt zuvor von einem serverseitigen Script geschrieben wurde:
//ActionScript des Flashfilms
_root.myMovieClip.loadVariables("test.txt");
_root.myMovieClip.onData = function()
{
_root.myMovieClip.txt1.text = var1 + " und " + var2;
};
//Inhalt einer externen Textdatei
&var1=String1&var2=String2
myMovieClip
die Variablen aus der externen Textdatei test.txt geladen, wobei diese im geforderten Format vorliegen. Die erzeugten Variablen im Flash film werden im Anschluss in ein Textfeld namens txt1
der Instanz geschrieben.Um das Laden direkt durch ein serverseitiges Script zurückgegebener Variablen zu demonstrieren, soll folgendes Beispiel angeführt werden:
//ActionScript des Flashfilms
_root.myMovieClip.loadVariables("test.php");
_root.myMovieClip.onData = function()
{
_root.myMovieClip.txt1.text = var1 + " und " + var2;
};
//Script in test.php
<?php
$var1 = "String1";
echo '&var1=' . $var1 . '&var2=String2';
?>
Werden in den zu ladenden Variablen Informationen aus Datenbanken gespeichert, ist mittelbar auch die Anbindung von Flash an Datenbank gegeben.
Neben der Methode
loadVariables
des Movieclip - Objekts existieren auch noch die mittlerweile veralteten Aktionen loadVariables("URL", Stufe/Movieclip [ , Variablen])
und loadVaiablesNum("URL", Stufe [ , Variablen])
. Erstere kann Variablen in eine Stufe des Flash players oder eine Movieclipinstanz des Flash films laden, wobei loadVaiablesNum
lediglich das Laden von Variablen in eine Stufe beherrscht.Seit der Flash playerversion 6 ist das dynamische Laden von Variablen auch mithilfe des
LoadVars
- Objekts möglich, deren Methoden auch Möglichkeiten zum Überwachen des Ladefortschritts (Preloader) bieten. So ließe sich das erste obige Beispiel unter Anwendung des LoadVars
-Objekts wie folgt erweitern:
_root.myMovieClip.myLoadVars = new LoadVars();
_root.myMovieClip.myLoadVars.onLoad = function(success)
{
trace(_root.myMovieClip.myLoadVars.getBytesLoaded() + " von " +
_root.myMovieClip.myLoadVars.getBytesTotal() + " geladen!");
if(success)
{
_root. myMovieClip.txt1.text = this.var1 + " und " +
this.var2;
}
}
myLoadVars.load("test.txt");
load("URL")
des neu erzeugten LoadVars
- Objekts myLoadVars
im Movieclip myMovieClip
geladen, geparst und anschließend als Eigenschaften des Objekts in jenes geschrieben. Schließlich werden nach erfolgreichem Laden der Variablen, welches durch einen booleschen Parameter (hier: success
) signalisiert wird, die Eigenschaften des Objekts mit den Bezeichnern der geladenen Variablen in das Textfeld des Movieclips myMovieClip
geschrieben. Die Methoden getBytesLoaded()
und getBytesTotal()
des LoadVars
- Objekts geben hier darüber hinaus Aufschluss darüber, wie weit der Ladevorgang bereits fortgeschritten ist.
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Weiterlesen: ⯈ Verarbeitung von XML-Dokumenten mit ActionScript
Über uns

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project