Rheinwerk Design < openbook > Rheinwerk Design - Know-how für Kreative.
Know-how für Kreative

 << zurück
ActionScript 1 und 2 von Sascha Wolter (http://www.saschawolter.de/)
Objektorientierung und Codedesign mit Flash MX 2004
Buch: ActionScript 1 und 2

ActionScript 1 und 2
672 S., mit CD, Referenzkarte, 44,90 Euro
Rheinwerk Design
ISBN 3-89842-221-6
gp Kapitel 19 Flashdetection
  gp 19.1 Erkennung mit Skript
    gp 19.1.1 Arbeitsweise
    gp 19.1.2 Hilfsmittel
  gp 19.2 Erkennung ohne Skript
    gp 19.2.1 Arbeitsweise
    gp 19.2.2 Testen der Flashdetection
    gp 19.2.3 Erweitern der Flashdetection


Rheinwerk Design - Zum Seitenanfang

19.2 Erkennung ohne Skript  downtop

Die Erkennung des Flash Players kann auch ohne Skriptsprachen wie JavaScript oder VBScript durchgeführt werden. Das hat folgende Vorteile:

gp  Der Benutzer benötigt keine speziellen Webbrowser, da die Erkennung plattformübergreifend in fast allen Situationen zuverlässig funktioniert.
gp  Die Erkennung funktioniert unabhängig von den Sicherheitseinstellungen und der Konfiguration des Webbrowsers.
gp  Es ist kein Technologiemix notwendig, da auf andere Technologien außer Flash verzichtet werden kann.

Macromedia liefert eine ähnliche Erkennung bereits standardmäßig mit Flash MX 2004 aus. Diese erkennt jedoch nur Flash Player ab Version 4 oder höher.

Es gibt aber auch Nachteile, die nicht verschwiegen werden dürfen. Diese Nachteile treten aber normalerweise nur auf, wenn gar kein Flash Player installiert ist, und selbst dann nur in den wenigsten Fällen!


Rheinwerk Design - Zum Seitenanfang

19.2.1 Arbeitsweise  downtop

Die skriptlose Erkennung verwendet eine Flash-Datei, den so genannten Sniffer (Schnüffler), um den Flash Player zu überprüfen. In mehr als 98 Prozent aller Fälle wird dieser Sniffer laut Macromedia von einem Webbrowser mit installiertem Flash Player aufgerufen. Nur bei den restlichen knapp zwei Prozent stoßen wir mit dieser Erkennung noch auf Schwierigkeiten: Falls es sich dann um den Internet Explorer unter Windows handelt, installiert dieser – soweit »Install on Demand« nicht deaktiviert ist – den aktuellen Flash Player automatisch und spielt dann den Sniffer ab. Auch der Netscape Navigator bietet eine ähnliche Funktion und installiert im Normalfall das aktuellste Plug-in.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 19.1   Arbeitsweise_der_Flash-Erkennung_ohne_Skript

In den wenigen Fällen, in denen nun kein Player vorhanden ist und dieser nicht installiert wird, ruft der Webbrowser über ein Refresh-Tag eine alternative Seite auf. Wenn es sich um keinen Browser der vierten Generation oder neuer handelt, funktioniert der Refresh (Auffrischen) nicht, und die aktuelle Seite bleibt auf dem Bildschirm stehen. Für diesen Fall, der weit weniger als zwei Prozent aller Anwender betrifft, wird eine entsprechende Information wie »Bitte klicken Sie hier …« am Bildschirm angegeben.

Wie schon gesagt, ist ja in den meisten Fällen bereits ein Flash Player vorhanden, und es muss »nur« noch die Version ermittelt werden. Wenn es sich bei dem Browser um den Internet Explorer unter Windows handelt, hat dieser eine an sich sehr nützliche Besonderheit, denn er erkennt die Version des Flash Players automatisch. Diese Erkennung basiert auf der im HTML-Dokument angegebenen Versionsnummer codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0". Falls Sie die automatische Installation des aktuellsten Flash Players vermeiden möchten, dann verwenden Sie stattdessen codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab".

Das komplette HTML-Dokument sollte ungefähr so aussehen:

<HTML>
<HEAD>
<TITLE>Flashdetection</TITLE>
<meta http-equiv="refresh" content="15;URL=noflash.html">
</HEAD>
<BODY>
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
 codebase="http://download.macromedia.
com/pub/shockwave/cabs/flash/swflash.
cab"
 WIDTH=18 HEIGHT=18>
  <PARAM NAME=movie VALUE="flashsniffer.swf">
  <EMBED src="flashsniffer.swf" WIDTH=18 HEIGHT=18 TYPE=
"application/x-shockwave-flash" PLUGINSPACE="http://www.macromedia.com/go/flashplayer">
  </EMBED>
</OBJECT>
</BODY>
</HTML>

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 19.2   Zeitleiste des Sniffers

Unabhängig davon, welcher Flash Player letztendlich installiert ist, startet jetzt der Sniffer seine Arbeit. Der Sniffer verwendet spezielle Eigenschaften der verschiedenen Flash Player und ermittelt so die installierte Version. Im ersten Schritt wird auf Flash 7 getestet, dann auf Flash 6, dann auf Flash 5, dann auf Flash 4 mit Druckfunktion (alle Flash Player seit Dezember 1999), dann auf Flash 4, auf Flash 3 und schließlich auf Flash 2.

Im Anschluss an einen einfachen Preloader wird zuallererst einmal die Versionskennung von Flash, soweit vorhanden, in handliche »Happen« zerlegt. Gerade hier waren viele Detections etwas anfällig, da Macromedia die Länge dieser Versionskennung abhängig vom Betriebssystem änderte. Bis zur Einführung dieser Kennung unter Linux gab es nur die Betriebssysteme Windows und Macintosh mit den Kennungen »win« und »mac«. Linux erhielt die Kennung »unix« und brachte so manche Flashdetection aus dem Tritt:

// Die Erkennung von Flash 5 und höher basiert auf der
Versionsvariablen

// Bestimme das Trennzeichen zwischen Betriebssystem und Version
(ein Leerzeichen)
for (delimiter1=-1; substring(eval("$version"), delimiter1, 1) ne
" "; delimiter1++) {
}
// Bestimme das Trennzeichen zwischen Version und Unterversion (ein Komma)
for (delimiter2=delimiter1+1; substring(eval("$version"), delimiter2, 1) ne ","; delimiter2++) {
}
// Bestimme das Trennzeichen zwischen Unterversion und Release (ein Komma)
for (delimiter3=delimiter2+1; substring(eval("$version"), delimiter3, 1) ne ","; delimiter3++) {
}
// Bestimme das Trennzeichen zwischen Release und Build (ein Komma)
for (delimiter4=delimiter3+1; substring(eval("$version"), delimiter4, 1) ne ","; delimiter4++) {
}
version = int(substring(eval("$version"), delimiter1+1,
delimiter2-delimiter1-1));
release = int(substring(eval("$version"), delimiter3+1,
delimiter4-delimiter3-1));
Flash Player 5 oder 6

Im gleichen Bild überprüfen wir, ob es sich um den Flash Player 5 oder 6 handelt. Die Überprüfung findet mit Hilfe der seit Flash 4 vorhandenen Variablen $version statt. Da sich neuere Flash-Dateien in einem Flash Player der Version 2 recht eigenartig verhalten, müssen noch einige Zeilen geschrieben werden. Die URL wird in einer Variablen vor einem Flash 2-Player »versteckt«, und für Flash 2 muss noch ein play hinten angefügt werden, da sonst der Film nicht weiter abspielt und somit die folgenden Überprüfungen auf ältere Flash Player nicht mehr funktionieren.

if (version == 5 and release<=40) {
   url = "flash5.html";
   getURL(url);
   stop();
} else if (version == 5 and release>40) {
   url = "flash5xml.html";
   getURL(url);
   stop();
} else if (version == 6) {
   url = "flash6.html";
   getURL(url);
   stop();
} else if (version>=7) {
   url = "flash7.html";
   getURL(url);
   stop();
} else {
   play();
}

In dem Skript wird über eine Kontrollstruktur überprüft, ob (if) der Flash Player 5, 5 mit erweiterter XML-Unterstützung, 6, 7 oder (für die Zukunft) ein neuerer installiert ist. Falls nicht (else), läuft die Anwendung einfach weiter ab und gelangt im nächsten Schlüsselbild zu einer weiteren Überprüfung.

Flash 4 mit Druckfunktion

Das Prüfen auf Flash 4 mit Druckfunktion funktioniert ähnlich. Hier wird aber nur überprüft, ob die Variable $version überhaupt existiert, da sie mit diesem Flash Player das erste Mal eingeführt wurde:

// Erkennung der Druckfunktion basiert auf der $version Variable 
    ($version ist erst mit einem späteren Flash Player 4 eingeführt worden)
url = "flash4print.html";
if (eval("$version") gt "") {
   getURL(url);
   stop();
} else {
   play();
}
Flash 4 Player

Für den Test auf den normalen Flash 4 Player reicht die Aktion if kombiniert mit einem Ausdruck. Dies verstehen weder Flash 2 noch Flash 3.

// Erkennung von Flash 4 basiert auf Ausdrücken (Ausdrücke sind erst mit Flash 4 eingeführt worden)
url = "flash4.html";
if (url gt "") {
   getURL(url);
   stop();
} else {
   play();
}
Flash 3

Die Überprüfung auf Flash 3 benötigt einen Movieclip, da diese in Flash 2 noch nicht existierten und dementsprechend auch nicht abgespielt werden. In diesem Movieclip werden die folgenden Aktionen abgelegt, die unter anderem auch verhindern, dass weitere Überprüfungen durchgeführt werden, falls Flash 3 vorhanden ist.

// Erkennung von Flash 3 basiert auf Movieclips (Movieclips sind erst mit Flash 3 eingeführt worden)
getURL ("flash3.html");
tellTarget ("/") {
    stop ();
}
Flash Player 2

Falls bis hierhin keine Überprüfung erfolgreich war, dann muss es sich um den Flash Player der Version 2 handeln, denn sonst würde die Flash-Anwendung überhaupt gar nicht funktionieren.

// Erkennung von Flash 2
// (Es muss Flash 2 sein, denn sonst würde diese Anwendung nicht ablaufen)
getURL("flash2.html");
stop();

Damit der Sniffer zuverlässig funktioniert, wird er im Flash 4-Format veröffentlicht. Aus diesem Grund sind auch nur Aktionen verwendet worden, die es auch schon in Flash 4 gab (falls Sie für den Sniffer beim Veröffentlichen das 5-er-Format wählen, arbeitet er nicht korrekt).


Rheinwerk Design - Zum Seitenanfang

19.2.2 Testen der Flashdetection  downtop

Um die Flashdetection testen zu können, benötigen Sie zuallererst die alten Flash Player. Diese bietet Macromedia unter http://www.macromedia.com/support/flash/ts/documents/oldplayers.htm für Testzwecke an. Bei dem Plug-in (alle Browser außer dem Internet Explorer unter Windows) sind die Installation und das Entfernen kein Problem.

Flash Player entfernen

Falls Sie den Flash Player komplett aus Ihrem System verbannen möchten, finden Sie diesen im Plug-in-Ordner des Browsers unter den Dateinamen

gp  NPSWF32.dll unter Windows
gp  Shockwave-Flash-NP-PPC oder Shockwave-Flash-NP-68 auf Macintosh-Computern

Durch das Entfernen der Datei beginnen für Sie traurige Zeiten ohne Flash.

Beim Internet Explorer unter Windows ist das nicht ganz so einfach. Bevor Sie einen älteren Flash Player installieren, sollten Sie den vorhandenen Flash Player entfernen. Dazu finden Sie die zugehörige ActiveX-Steuerung swflash.ocx entweder im Ordner C:\Windows\System\Macromed\Flash (Windows 9x und ME) oder im Ordner C:\WinNT\System32\Macromed\Flash (Windows NT, XP oder Windows 2000). Nachdem Sie die ActiveX-Steuerung gefunden haben, können Sie diese über regsvr32 C:\Windows\System\Macromed\Flash\swflash.ocx /u aus Ihrem System deaktivieren (den genauen Pfad zur Datei nicht vergessen). Um das Entfernen wirklich endgültig abzuschließen, müssen Sie jetzt noch alle Vorkommen von swflash.ocx und swflash.inf von Ihrem Computer löschen und dann einen Neustart durchführen.

Automatische Deinstallation

Glücklicherweise hat Macromedia mittlerweile ein kleines Hilfsprogramm bereitgestellt, welches das Deinstallieren übernimmt. Dieses finden Sie kostenlos unter http://www.macromedia.com/support/flash/ts/documents/remove_player.htm.

Flash Plugin Switcher

Unter http://www.kewbee.de/FlashPluginSwitcher/ erhalten Sie den Flash Plugin Switcher. Dieser erlaubt den komfortablen Wechsel zwischen verschiedenen Flash Playern, ohne dass diese jedes Mal installiert und deinstalliert werden müssen.


Rheinwerk Design - Zum Seitenanfang

19.2.3 Erweitern der Flashdetection  toptop

Die Flashdetection ohne Skript lässt sich auch mit der JavaScript-Methode erweitern, um die Vorteile beider Technologien optimal miteinander zu verbinden. Aber auch ohne JavaScript kann mit dieser Flashdetection noch mehr als nur die Version des installierten Flash Players herausgefunden werden. Mit einem einfachen Trick finden Sie heraus, ob es sich um den Internet Explorer unter Windows oder einen anderen Browser handelt. Da der Internet Explorer mit dem Object-Tag arbeitet, brauchen Sie an dieser Stelle nur einen anderen Flash-Film anzugeben.

Falls der Benutzer einen Flash Player 4 oder neuer installiert hat, können Sie auch mit einer Flash-Anwendung arbeiten, welche die entsprechende Information von außen über das HTML-Dokument erhält. In einer Flash-Anwendung lassen sich direkt über die URL-Angabe Variablen festlegen, was nicht nur in der URL-Zeile des Browsers, sondern auch innerhalb eines HTML-Dokumentes funktioniert:

<HTML>
<HEAD>
<TITLE>erweiterteDetection</TITLE>
</HEAD>
<BODY>
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
 WIDTH=100  % HEIGHT=100  %>
  <PARAM NAME=movie VALUE="erweiterteDetection.swf?activex=yes">
  <EMBED src="erweiterteDetection.swf?activex=no" WIDTH=100  
% HEIGHT=100  % TYPE="application/x-shockwave-flash" 
PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">
  </EMBED>
</OBJECT>
</BODY>
</HTML>

Eine weitere Information, die Sie leider erst mit dem Flash Player 4 vom Dezember 1999 oder höher herausfinden können, ist das Betriebssystem und die genaue Versionsnummer des Flash Players ($version und getVersion). In Flash sieht das in ActionScript dann so aus:

// Die Erkennung von Flash 5 und höher basiert auf der Versionsvariablen

// Bestimme das Trennzeichen zwischen Betriebssystem und Version (ein Leerzeichen)
for (delimiter1=-1; substring(eval("$version"), delimiter1, 1) ne
" "; delimiter1++) {
}
// Bestimme das Trennzeichen zwischen Version und Unterversione (ein Komma)
for (delimiter2=delimiter1+1; substring(eval("$version"), delimiter2, 1) ne ","; delimiter2++) {
}
// Bestimme das Trennzeichen zwischen Unterversion und Release (ein Kommar)
for (delimiter3=delimiter2+1; substring(eval("$version"), delimiter3, 1) ne ","; delimiter3++) {
}
// Bestimme das Trennzeichen zwischen Release und Build (ein Komma)
for (delimiter4=delimiter3+1; substring(eval("$version"),
delimiter4, 1) ne ","; delimiter4++) {
}
os = substring(eval("$version"),0, delimiter1-1);
version = int(substring(eval("$version"), delimiter1+1,
delimiter2-delimiter1-1));
subversion = int(substring(eval("$version"),delimiter2+1,
delimiter3-delimiter2-1));
release = int(substring(eval("$version"), delimiter3+1,
delimiter4-delimiter3-1));
capabilities-Objekt

Mit Flash 6 hat Macromedia das capabilities-Objekt eingeführt (System.capabilities). Dieses erlaubt es ebenfalls, Systemeinstellungen zu ermitteln. In Flash 7 hat Macromedia diesem Objekt weitere Eigenschaften hinzugefügt, die in der folgenden Tabelle zusammengefasst sind:


Tabelle 19.2   Systemeinstellungen

Property Description Flash Player
System.capabilities.avHardwareDisable Ermittelt, ob der Zugriff auf eine Kamera oder ein Mikrofon möglich ist. 7
System.capabilities.hasAccessibility Ermittelt, ob der Flash Player mit einem Programm für den barrierefreien Zugang kommunizieren kann. 6
System.capabilities.hasAudio Ermittelt, ob das System Ton abspielen kann. 6
System.capabilities.hasAudioEncoder Ermittelt, ob ein Audiostream enkodiert werden kann (z.B. von einem Mikrofon). 6
System.capabilities.hasEmbeddedVideo Ermittelt, ob es eingebautes Video gibt. 6.0.65
System.capabilities.hasMP3 Ermittelt, ob MP3 dekodiert werden kann. 6
System.capabilities.hasPrinting Ermittelt, ob gedruckt werden kann. 6.0.65
System.capabilities.hasScreenBroadcast Ermittelt, ob Bildschirme im Zusammenspiel mit dem Flash Communication Server MX übertragen werden können. 6.0.79
System.capabilities.hasScreenPlayback Ermittelt, ob Bildschirme im Zusammenspiel mit dem Flash Communication Server MX abgespielt werden können. 6.0.79
System.capabilities.hasStreamingAudio Ermittelt, ob der Flash Player Audiostreams abspielen kann. 6.0.65
System.capabilities.hasStreamingVideo Ermittelt, ob der Flash Player Videostreams abspielen kann. 6.0.65
System.capabilities.hasVideoEncoder Ermittelt, ob ein Videostream enkodiert werden kann (z.B. von einer Kamera). 6
System.capabilities.isDebugger Erkennt, ob der Flash Player eine offiziell herausgegebene Version oder eine spezielle Debugger-Version ist. 6
System.capabilities.language Ermittelt die Sprache des Systems (nach ISO 639-1). 6
System.capabilities.localFileReadDisable Ermittellt, ob lokale Dateien gelesen werden dürfen. 7
System.capabilities.manufacturer Ermittelt den Hersteller des Flash Players. 6
System.capabilities.os Ermittelt das Betriebssystem. 6
System.capabilities.pixelAspectRatio Ermittelt das Seitenverhältnis der Bildschirmpunkte. 6
System.capabilities.playerType Ermittelt die Art des Flash Players (Stand-alone, External, Plug-in oder ActiveX). 7
System.capabilities.screenColor Ermittelt, ob der Bildschirm Farben, Graustufen oder nur Schwarz-Weiß darstellt. 6
System.capabilities.screenDPI Ermittelt die Auflösung des Bildschirms in DPI. 6
System.capabilities.screenResolutionX Ermittelt die horizontale Größe des Bildschirms in Pixel. 6
System.capabilities.screenResolutionY Ermittelt die vertikale Größe des Bildschirms in Pixel. 6
System.capabilities.serverString Gibt eine URL-enkodierte Zeichenkette zurück, die sämtliche Werte der System.capabilities-Eigenschaft enthält. 6
System.capabilities.version Ermittelt die Version des Flash Players. 6

 << zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: ActionScript 1 und 2
ActionScript 1 und 2
bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: JavaScript






 JavaScript


Zum Rheinwerk-Shop: jQuery






 jQuery


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Suchmaschinen-Optimierung






 Suchmaschinen-
 Optimierung


Zum Rheinwerk-Shop: Schrödinger lernt HTML5, CSS3 und JavaScript






 Schrödinger lernt
 HTML5, CSS3
 und JavaScript


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern