Frameübergreifende Steuerung eines Flash Movies mit JS


Einleitung
  Einführende Erklärung
  Wozu braucht man diese Art von Steuerung?
  Worin liegen die Probleme?
  Bekannte Schwächen dieses Scriptes
  Syntax zur Steuerung des Shockwaveplayers

Steuerung mit einer HTML/Flash Navigation
  Das Script
  Der Flashfilm
  Die HTML Steuerung
  Die Flash Steuerung (Flash4 und Flash5)

Macromedias JavaScript Demo
  Macromedias JavaScript Demo
  Auflistung einiger Actions


Beispielliste
  Einige Anwendungen dieses Scripts

Thema:
Frameübergreifende Steuerung eines Flash Movies mit JS
Description:
Wie man per JS ein Flashmovie in einem anderen Frame steuert.
Keywords:
Flash, JavaScript, Shockwaveplayer
Author:
Markus Gottscheber
Date:
20.10.2001
Doc-ID:
52-001
URL:
http://www.flashworker.de/tutorial/52/001.html
Version:
2.00
Änderungen:
Neuüberarbeitung, Flash5
Anforderungen:
Flash 4 oder Flash 5
Vorkenntnisse:
Grundkenntnisse in HTML, Flash und JavaScript
Download:

einfaches Demo
Macromedias JavaScript Demo

 


Einleitung


Einführende Erklärung

Zu allererst möchte ich folgendes festhalten: Dieses Script stammt nicht von mir! Es wurde als JavaScript Demo von Macromedia auf der Flash4 CD (im Verzeichnis \Goodies\Macromedia\JavaScript Demo) beigelegt. Da für dieses Script keine Dokumentation vorhanden war, habe ich versucht eine solche zu erstellen.


Wozu braucht man diese Art von Steuerung?

Diese Art von Steuerung benötigt man sobald mehr als ein Frame benutzt wird, und durch eine Aktion im ersten Frame ein Flash Movie im zweiten Frame gesteuert werden soll.
Um diese Problematik zu veranschaulichen folgendes kleines Beispiel:
Man hat eine HTML Seite bestehend aus zwei Frames. Im Frame "links" ist eine einfache Menüsteuerung, im Frame "rechts" ein kleiner Flash Film. So, nun steht man vor genau diesem Problem. Ich möchte durch eine Aktion im linken Frame eine Aktion im rechten Frame auslösen - z.B. eine Animation stoppen oder starten.


Worin liegen die Probleme?

Es treten folgende zwei Probleme auf:
1. Man muss durch eine Aktion im linken Frame den Shockwaveplayer, der das Movie im rechten Frame abspielt, das gewünschte Kommando mitteilen.
2. Das zweite Problem ist allerdings viel schwieriger zu bewältigen. Es ist nähmlich das allseits unbeliebte Problem der Browserinkompatibilität. Wie bei vielen anderen Problemen auch, ist hieran nur der Umstand schuld dass die Browser der verschiedenen Softwarehäuser nicht die gleiche Syntax benutzen um die gleichen Aktionen auszuführen!


Bekannte Schwächen dieses Scriptes

Wenn das Script wie folgend beschrieben verwendet wird, ist es nach meiner Erfahrung nach mit allen wichtigen Browsern kompatibel. Die große Ausnahme ist die Kombination Mac und Internet Explorer - hier will dieses Script seinen Dienst nicht vollbringen.


Syntax zur Steuerung des Shockwaveplayers

Für Internet Explorer:

document.framename.flashfilename.action
Für Netscape:
document.framename.document.embeds[0].action



 


Steuerung mit einer Flash/HTML Navigation

Schauen wir uns einfach einmal ein kleines Beispiel an. Und hier kannst du es downloaden.


Das Script

Dieses Script sollte im Head Bereich des Dokumentes stehen indem man die Steuerung des Flash Movies vornimmt.

<SCRIPT LANGUAGE="JavaScript">
var InternetExplorer = navigator.appName.indexOf("Microsoft") != -1;
function stuff(s)
{
document.msgForm.message.value = s;
}
</script>

WICHTIG: Auf Groß und Kleinschreibung achten!




Der Flashfilm

Wichtig ist auch, dass folgende EMBED und OJECT Tags beim laden des Flash-Movies angegeben sind:

<object id="flashfilename"> <param name="swLiveConnect" value="true">
<embed name="flashfilename" swliveconnect=true> </embed>
in diesem Beispiel sieht das so aus:
<object id="film"> <param name="swLiveConnect" value="true">
<embed name="film" swliveconnect=true> </embed>


Die HTML Steuerung

<a href='javascript:var m = InternetExplorer ? parent.framename.flashfilename : parent.framename.document.embeds[0]; m.action'>TEXT</a>

So, jetzt muss man nur noch die richtigen Parameter in diesen HTML-Code einsetzen. Da wären:
framename: Der Name des Frames, indem der anzusprechende Flashfilm läuft
flashfilename: Der Name des anzusprechenden Flashfilms.
action: Die auszuführende Aktion. Eine Liste der verschiedenen Möglichkeiten findest du etwas weiter unten.
TEXT: Das ist natürlich allseits bekannt, hier kommt die Linkbezeichnung rein - standard HTML.

In diesem Beispiel sieht das so aus:

<a href='javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.GotoFrame(1)'>Frame 1</a>
<a href='javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.GotoFrame(11)'>Frame 11</a>
<a href='javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.TStopPlay("_flash0/linie")'>Stop</a>
<a href='javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.TPlay("_flash0/linie")'>Play</a>



Die Flash Steuerung

Meistens wird es allerdings erforderlich sein das Menü ebenfalls in Flash zu gestalten - Es muss ja nicht unbedingt ein richtiges Menü sein, es könnten ja auch zwei interaktive Filme sein - Da ist ja soooooo viel möglich!
Im Prinzip ist auch nicht viel Unterschied zur HTML Variante vorhanden. Die JavaScript Anweisung wird in eine Get URL Aktion verpackt - und das war es schon.

Noch einmal die benutzten Parameter:
framename: Der Name des Frames, indem der anzusprechende Flashfilm läuft
flashfilename: Der Name des anzusprechenden Flashfilms.
action: Die auszuführende Aktion. Eine Liste der verschiedenen Möglichkeiten findest du etwas weiter unten.

Die Action Script Anweisung in Flash 4:

On (press)
    Get URL ("javascript:var m = InternetExplorer ? parent.framename.flashfilename : parent.framename.document.embeds[0]; m.action")
End On
In diesem Beispiel sieht das so aus:
On (press)
("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.GotoFrame(1)")
End On On (press) ("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.GotoFrame(11)")
End On On (press) ("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.TStopPlay("_flash0/linie")")
End On On (press) ("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.TPlay("_flash0/linie")") End On

 

Die Action Script Anweisung in Flash 5:

on (press) {
    getURL ("javascript:var m = InternetExplorer ? parent.framename.flashfilmname : parent.framename.document.embeds[0]; m.action");
}
In diesem Beispiel sieht das so aus:
on (press) {
    getURL ("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.GotoFrame(1)");
}

on (press) {
    getURL ("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.GotoFrame(11)");
}

on (press) {
    getURL ("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.TStopPlay(\"_flash0/linie\")");
}

on (press) {
    getURL ("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.TPlay(\"_flash0/linie\")");
}

 

WICHTIG: In Beiden Fällen darf man nicht vergessen das benötigte JavaScript einzubauen (im Head-Bereich der dazugehörigen HTML Seite)!



 


Macromedias JavaScript Demo

Es gibt sehr viele verschiedene Möglichkeiten wie der Parameter "action" aussehen kann. Man kann nicht nur das Hauptmovie steuern, sondern auch die in diesem Movie eingebauten Ebenen und Instanzen.
Eine gute Möglichkeit den Einsatz dieser verschiedenen Steuermöglichkeiten zu sehen, ist das von Macromedia mitgelieferte "JavaScript Demo" auszuprobieren. Ihr findet es auf eurer "Flash4" CD im Verzeichnis "\Goodies\Macromedia\JavaScript Demo" - oder Ihr könnt es auch hier downloaden.


Liste der verwendeten Anweisungen

Zur Steuerung der Instranz "flying bird":

framename = fw_map
flashfilename = map
Instanzname = bird

javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TStopPlay("_flash0/bird")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TPlay("_flash0/bird")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoFrame("_flash0/bird", 1)
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoFrame("_flash0/bird", 3)
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoFrame("_flash0/bird", m.TCurrentFrame("_flash0/bird")+1)
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoFrame("_flash0/bird", m.TCurrentFrame("_flash0/bird")-1)
Das Ganze geht natürlich auch noch etwas komplexer. Man verwendet einfach mehrere Labels und Instanzen:
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.LoadMovie(1, "loop.swf")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.LoadMovie(1, "")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TPlay("_flash1")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TStopPlay("_flash1")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoLabel("_flash1", "part 1")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoLabel("_flash1", "part 2")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoLabel("_flash1", "part 3")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoLabel("_flash1", "part 4")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoFrame("_flash1", m.TCurrentFrame("_flash1")+1)
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoFrame("_flash1", m.TCurrentFrame("_flash1")-1)
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; stuff(m.TCurrentLabel("_flash1"))
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; stuff(m.TCurrentFrame("_flash1"))



Auflistung einiger Actions


Eine kurze Zusammenfassung der oben verwendeten Actions:

Syntax

Beispiel

Beschreibung

LoadMovie(MovieNummer,"MovieName.swf")

LoadMovie(1,"loop.swf")
LoadMovie(1,"")

lädt movie "loop.swf" auf Ebene 1 nach
löscht den movie auf Ebene 1

TGotoFrame("welchesMovie",Ziel)

TGotoFrame("_flash0",50)
TGotoFrame("_flash0/bird",2)
TGotoFrame("_flash1",100)

geht zu Frame 50, Ebene 0
geht zu Frame 2, Ebene 0, Instanzname "bird"
geht zu Frame 100, Ebene 1

TGotoLabel("welchesMovie","welcherLabel")

TGotoLabel("_flash1","part3")

geht zu Label "part3" auf Ebene 1

TPlay("welchesMovie")

TPlay("_flash1")
TPlay("_flash0/bird")

spielt das movie auf Ebene 1 weiter ab
spielt das movie auf Ebene 0 und Instanzname "bird" weiter ab

TStopPlay("welchesMovie")

TStopPlay("_flash1")
TStopPlay("_flash0/bird")

stoppt das Abspielen des movies auf Ebene 1
stoppt das Abspielen des movies auf Ebene 0, Instanzname "bird"



 


Beispielliste


Anwendungen dieses Scripts

Hier möchte ich Euch einige praktische Anwendungen zeigen. Ihr seht hier vorallem die typische Anwendung dieses Scriptes: Menü steuert Hauptfilm oder Hauptmenü steuert Untermenü.

Link Beschreibung Autor

www.be-commerce.de

Hauptmenü (links) steuert Untermenü (oben)

Markus Dübbert
ZS - Communication
www.cominto.de Sitemap (rechts) steuert Navigation (links). com.in.to gmbh
www.ee-consultants.de HTML Seite (oben) steuert Menü (unten). Wolf-Ludwig Kummetz
MM-Abteilung der E&E information consultants AG

www.fujifilm.de

Menü (links) steuert Hauptfilm (rechts)

Daniela Schulz
nunet solutions

www.skg.krumbach.de

Hauptmenü (oben) steuert Untermenü (links)

Andreas Kurtz