JavaScript
Diese Seite drucken Hier können Sie uns eine Emaiil schreiben zurück Zur Übersicht vorwärts Links   Letzte Änderungen 28.09.2021
     
Flash-PlugIn Check ohne JavaScript
von Traum-Projekt

Die wohl am meisten gestellte Frage aller Flashworker: "Wie finde ich raus, ob der Besucher das PlugIn hat?" In diesem Tutorial widmen wir uns dieser Problematik und stellen einen Lösungsweg ohne JS vor.

Eine Möglichkeit wäre natürlich auf eine statische Startseite alle Anforderungen zu schreiben.
Damit Sie meine Seite richtig angezeigt bekommen, müssen Sie: und dann wird erst einmal aufgezählt, was der Besucher haben muss.

Eine andere Möglichkeit ist, nach dem PlugIn im Browser mit JavaScript zu suchen. Nur gibt es bei JavaScript ja eine Reihe von Unterschieden zwischen den Browsern. Und was ist, wenn der Besucher JavaScript ganz deaktiviert hat?

Beispiel

Viel effektiver und eleganter ist es, das PlugIn sich selbst prüfen zu lassen.
Das Verfahren ist vom Prinzip sehr einfach. Jede Version von Flash hat seine speziellen Eigenschaften. Die neueren besitzen eine Variable $version, die den Versionsindex enthält.
Ältere Versionen kommen mit dieser und anderen Methoden, Funktionen oder Variablen nicht zurecht und ignorieren die Angaben einfach.

Zum ActionScript Code:

Es werden 7 Schlüsselbilder benötigt. Um die Ladezeit des Filmes nicht zu erhöhen, sollte (darf) er keinen Inhalt (Grafiken, Textfelder, etc.) haben.

Die ersten beiden Schlüsselbilder sind für Besucher mit einem analogen Modem gedacht und beinhalten einen Preloader. Dazu steht im ersten Schlüsselbild: 

ifFrameLoaded (7) { 
    gotoAndPlay(3); 
 } 

Damit er diese Abfrage auch immer wiederholt, steht im 2. Schlüsselbild:

 gotoAndPlay(1); 

Im 3. Schlüsselbild wird die Identifizierung der neueren Player vorbereitet.
Dazu wird der Wert von $version einer Variable zugewiesen.

 a = eval("$version"); 
 trace(a); 

Durch das trace kann jetzt bei einem Probelauf des Filmes (STRG + ENTER) der Inhalt der Varibale angezeigt werden. Später sollte der Eintrag gelöscht oder als Bemerkung ausgeklammert werden.
Als Ausgabe steht jetzt wahrscheinlich "WIN 6,0,0,291" in dem Ausgabefenster. Dieser String muss jetzt im 4. Schlüsselbild ausgewertet werden.

Dazu muss die Playerkennung (hier 6) aus dem String gelöst werden.

 x = "1";
 while (Number(x)<Number(length(a)) {
  if (substring(a, x, 1) eq ",") {
    if (Number(substring(a, x-1, 1)) == 5 {
      getURL("flash5.htm");
      stop();
    }
    if (Number(substring(a, x-1, 1)) == 6) {
      getURL("flash6.htm");
      stop();
    }
  }
  x = Number(x)+1;
 }

Was passiert? Der String wird auf den Eintrag nach dem ersten Komma hin untersucht. Ist dieser gleich einer bekannten Playerkennung, so ruft das Script die entsprechende Seite auf und hält an.
In der Praxis sollte beides die gleiche Seite sein, da hier die Prüfung erfolgreich war. Denkbar wäre jedoch auch, dass der Film (wegen seines speziellen ActionScriptes) nur für den 6er ausführbar ist! Dann sollte natürlich nur der 6er Link erfolgreich Zugang zur Homepage gewähren und der andere Link (vom 5er) zur Fehlerseite, die dem User sagt, warum er nicht zur Homepage kann und wie er seinen Player auf den neusten Stand bringen kann.

Player, die älter als der 5er sind, kennen $version nicht. Daher wird die Prüfung ignoriert und der Film geht im jetzt folgenden Schlüsselbild 5 weiter.

Der 4er Player kennt gegenüber seinen Vorgängern die Wahrnheitswerte true & false. Darauf baut die nächste Abfrage auf. Einer beliebigen Variable wird true zugewiesen und dann überprüft, ob die Variable diesen Wert angenommen hat.

 pl4 = "true"; 
 if (pl4 eq "true") {
  getURL("flash4.htm");
 stop();  } else {
 play();
 } 

Sollte wirklich ein Player bei der Überprüfung bis an diese Stelle (Schlüsselbild 6) gekommen sein, kann es nur der 3er oder 2er sein. Daher muss hier der 3er aussortiert werden.
Der Unterschied zwischen den beiden Versionen ist die Einführung von MovieClips. Diese versteht der Player von Flash3, der Flash2 Player ignoriert sie jedoch.

Also wird im 6. Schlüsselbild ein leerer MC erstellt, der wiederum aus zwei leeren Schlüsselbildern besteht. Das 2. Schlüsselbild muss folgendes ActionScript haben:

 getURL("flash3.htm"); 
 stop();

Das letzte und somit 7. Schlüsselbild erreicht also nur noch Player 2!
Für diesen wird wieder ein ActionScript in die Hauptzeitleiste gelegt.

 getURL("flash2.htm"); 
 stop();

Somit wurde jeder Player auf seine eigene Seite umgeleitet. Muss aber nicht sein, da auch eine gemeinsame Fehlerseite für alle, die keinen Zugang bekommen sollen, ausreicht.

Dieser erstellte Flashfilm muss exportiert werden und in ein HTML Dokument eingebunden werden. Damit nicht gleich das Macromediaeigene Downloadfenster aufgeht, muss dieses mit möglichst wenig Code passieren. Am besten ganz auf die von Flash erzeugte HTML Datei verzichten und das Movie mit folgendem Code in die Startseite einbinden:

<object width="50" height="50">
<param name=movie value="versioncheck.swf">
<param name=quality value=high>
<embed src="versioncheck.swf" quality=high type="application/x-shockwave-flash" width="50" height="50">
</embed>

</object>

Damit auch Besucher ganz ohne FlashPlayer auf eine Fehlerseite kommen, muss in den Kopfbereich der HTML Datei noch ein Meta Refresh. Dieser sollte den Browser und Player um die 6 Sekunden Zeit geben, den Check zu laden und zu durchlaufen. Das ist der Hauptgrund, warum in dem Browsercheck aber auch wirklich nichts anderes stehen sollte als der Code! Nicht einmal der Satz "Ich teste ob Flash da ist" oder etwas Vergleichbares.
Auch sollte die HTML Datei keinen weiteren Inhalt haben außer:

  • weitere Meta Tags, die für Suchrobots wichtig sind
  • einem HTML Link zur richtigen Seite, damit die Suchmaschine diesem folgen kann

<meta http-equiv="refresh" content="6; URL=noplayer.htm">