Kommunikation von Flash mit HTML-Formularen über JavaScript
Benötigte Mittel:
- Flash
- HTML-Editor
Fangen wir mit dem Flashteil an.
Wir brauchen:
- 1 Textfeld (txtEingabe) [var: eingabe][Mehrzeilig][Rahmen zeigen opt.]
- 1 Sendbutton (cmdtxtsend)
Dann dieses AS in die Hauptzeitleiste:
ActionScript:
_root.cmdtxtsend.onRelease = function(){
texte = new Array();
text = _root.eingabe;
x = 0;
while(text.length > 100){ //der Text wird in Stücke à 100 Zeichen aufgesplittert
texte[x] = substring(text, 0 , 100); //die ersten 100 Zeichen werden abgeschnitten und in [texte] geschrieben
text = substring(text, 101, text.length); //die restlichen Zeichen werden weiter verwendet
x++;
}
texte[texte.length] = text; //das übriggeblibene wird noch angehängt
texte[texte.length] = 0; //das ist der counter
action = 'del'; //action kann [del] sein, wenn das HTML-Textfeld gelöscht werden soll
getURL("javascript:getVarsFromFlash('" + texte[0] + "', '" + texte.length + "', '" + action + "');", "_self");
//Der erste Textteil wird zusammen mit den initialisierungsvars versendet
intID = setInterval(_root.sendVarsToJS, 50, texte);
//es wird ein Interval erzeugt der alle 50 Milisec prüft ob die Vars in der Funktion angekommen sind }
function sendVarsToJS(arr){ //die Intervalfunktion
counter = parseInt(arr[arr.length-1])+1; //der übergebene counter wird einer Variable zugewiesen (einfacher)
if(arr[arr.length-1] == arr.length){ //wenn alles versendet wurde (counter = arraylänge) wird er gelöscht
clearInterval(intID);
}
if(parseInt(_global.checkVar) == counter){
//_global.checkVar ist die Variable die vom JS manipuliert wird wenn die Daten //in der JS Funktion angekommen sind, wird die bestätigung in _globa.checkVar geschrieben
getURL("javascript:getVarsFromFlash('" + arr[counter] + "', '" + arr.length + "', 'null');", "_self");
//die Daten werden erneut versendet, für action wird nichts übergeben, weil es ja nur zum initialisieren war
arr[arr.length-1] = counter; //könnte man wahrscheinlich besser lösen, hatte aber kein Bock *gg*
}
}
Dann das exportieren unter FlashToJS.swf
Dann das HTML-File an.
Wir brauchen:
- 1 Formular (form1)
- 1 Textarea (txtOutput)
- 1 Textfield (aktuell) [disabled=„true“]
- 1 Flashfile (FlashToJS.swf)
Damit alles funktioniert müssen wir einige Einstellungen bei der Flasheinbindung vornehmen.
Beim <object> tag müssen wir name=“flaToJS“ und id=“flaToJS“ ändern und beim
<embed> tag müssen wir ebenfalls name=“flaToJS“ machen.
Wenn das alles gemacht ist, müssen wir nur noch das JavaScript hinzufügen.
PHP-Code:
<script language="JavaScript" type="text/JavaScript">
function getVarsFromFlash(text, total, action) {
if(action == 'del'){
document.form1.txtOutput.value = ''; //bei neustart werden die Textfelder geleert
document.form1.aktuell.value = '0'; //wird zurückgesetzt
}
var n = document.form1.txtOutput.value;
n = n + text; //die Textteile werden zusammengesetzt
document.form1.txtOutput.value = n;
var akt = document.form1.aktuell.value; //der zähler wird ausgelesen
akt ++; //erhöht
document.form1.aktuell.value = akt; //und zurück ins Textfeld geschrieben
if(akt != total - 1){ //Check ob alle Teile versendet wurden
document.flaToJS.setVariable("_global.checkVar", akt); //Flash wird mitgeteil, dass das Teil angekommen ist
}else{
document.flaToJS.setVariable("_global.checkVar", "end");//Das Ende wird mitgeteilt
document.form1.aktuell.value = 0; //aktuell wird zurückgesetzt (geschiet eigentlich schon oben
}
}
</script>
Nun muss man nur noch die HTML-Datei starten und beim Flash den Texteingeben den man versenden will.
Bekannte Probleme:
Hochkommas (’) können nicht versendet werden [JavaScript problem]
Copy + Paste im Flashtextfeld funktioniert bei meinem Beispiel nicht, oder nur bedingt.