| Gute Browser bieten für AnwenderInnen (meist im Hilfe-Menü) zumindest einige Information über ihre aktuellen Fähigkeiten. M$IE ist leider eine unangenehme Ausnahme. | Auf dieser Seite geht es um die Möglichkeiten, die aktuellen Browser-Fähigkeiten zu analysieren und die Daten für die Entwicklung dynamischer Webseiten zu nutzen. |
Javascript
|
ECMAScript für HTML und XML |
VBscript
|
Visual Basic für Webseiten |
| Strategie | Native-Fähigkeiten, Plugins und MIME-Types |
| HTTP-Header | Informationen (nur) für den Webserver |
| Javascript | Das navigator-Objekt, MIME-Types und Plugins |
| VBscript | Kompensation für die von M$IE nicht unterstützten Standardfunktionen |
| Test-Objekt | Nachträgliche Analyse eines eingebetteten Test-Objekts |
Strategie für die Analyse der Browser-Fähigkeiten |
|
|
"Native"-Unterstützung:
Alle gängigen Browser verfügen selbst ("native") über
grundlegende Fähigkeiten: sie können z.B. Bilder (JPG, PNG, GIF, ...)
vom Webserver anfordern und auf einer Webseite anzeigen.Diese Fähigkeiten sind nicht leicht durch Programme zu erfahren. Da jeder Browser seine "Identität" bekannt gibt, können sie für die "native"-Fähigkeiten Erfahrungswerte einsetzen. Sie müssen jedoch ihre Programme regelmäßig an neue Browser-Versionen anpassen. Plugins:
Zusätzliche Fähigkeiten können für die meisten Browser mit
Hilfe von Plugins installiert werden. Diese Hilfsprogramme werden vom Browser
verwendet, um bestimmte Elemente anzuzeigen, die "native" nicht
unterstützt werden. |
MIME-Type Jedes Element einer Webseite hat eine bestimmte → MIME-Type. Je nach Type wird das Element vom Browser selbst (native) oder von einem Hilfsprogramm (Plugin) verarbeitet und angezeigt. Wenn sie selbst einen → Webserver betreiben, dann können sie über dessen Konfiguration einstellen, welche MIME-Types für die Clients angekündigt werden. |
|
Dynamische Webseiten:
Wenn sie bei der Entwicklung dynamischer Webseiten auf unterschiedliche
Browser-Fähigkeiten reagieren wollen, dann stehen 3 unterschiedliche Wege zur
Verfügung:► Sie verwenden Client-seitige Programmierung. Ein Javascript-Programm stellt live die Browser-Umgebung fest und reagiert darauf. Dann müssen sie jeder Webseite jedoch alle möglichen Varianten als Scripts mitgeben. Das beschränkt die Reaktions-Möglichkeiten auf einfache Fälle. ► Sie schaffen vollendete Tatsachen und betten ein (evtl. unsichtbares) Test-Objekt in die Webseite ein. Nach (!) Aufbau der Seite kann Javascript mit DOM-Methoden analysieren, ob das Objekt existiert. Aufwändig und mühsam. |
►
Sie verwenden Server-seitige Programmierung, z.B. PHP oder Perl, um unterschiedliche
Webseiten an den Client zu senden, je nach dessen Fähigkeiten. Oft müssen sie dazu
eine Analyse-Seite vorschalten, die auf Client-Seite die Browser-Umgebung ermittelt.
Sie kommen also um die Live-Analyse der Browser-Plugins nicht herum. Ausserdem zeigen
manche Browser Warnungen an, wenn man versucht, ihre Fähigkeiten zu analysieren -
Das wird von manchen BenutzerInnen falsch verstanden und verhindert. ► 'Paranoide' Sicherheits-Einstellungen am BenutzerInnen-PC können jede Auskunft über die Umgebung verweigern. Das wird insbesondere vom IT-Marktführer forciert, denn damit werden die AnwenderInnen weitgehend auf seine Monopol-Software beschränkt. ► In der Praxis müssen sie Aufwand und mögliche Wirkung der verschiedenen Methoden gegeneinander abwägen. Meist ist eine Kombination angebracht. Den meisten Aufwand erfordert in jedem Falle das schwächste Produkt M$IE . . |
HTTP-Header |
|
| Wenn ihr Browser eine Seite von einem Webserver anfordert, dann sendet er im "Header" der Anforderung einige Informationen mit, u.a. seine Kennung als HTTP_USER_AGENT. Diese sind jedoch nur für Server-seitige Programmiersprachen ( → Perl, → PHP, ... ) zugänglich. |
Live-
$_SERVER['HTTP_USER_AGENT'] = CCBot/1.0 (+http://www.commoncrawl.org/bot.html)
|
|
Zur Verwertung der Information muss der String zerlegt und verarbeitet werden. Dazu verwendet man z.B. → Reguläre Ausdrücke (Regular Expressions). |
Eine Live-Demonstration für die HTTP-Header beliebiger Webseiten finden sie auf der Seite → HTTP-Header dieses Webs. |
Javascript |
|
Javascript Objekt navigatorbezeichnet das aktuell verwendete Browser-Programm und bietet eine Reihe nützlicher Eigenschaften und Methoden an.Rechts eine Live-Liste mit den Angaben ihres Browsers. Die wichtigsten Eigenschaften werden von allen Browsern geliefert. Umfang und Art der unterstützten Eigenschaften variieren je nach Produkt und Version. Zur Verwendung müssen die Ergebnis-Strings zerlegt und analysiert werden. Dazu verwendet man vorzugsweise → Reguläre Ausdrücke (Regular Expressions). |
Live-
|
Unter-Objekt mimeTypesHier der vereinfachte Javascript-Code, rechts die Live-Ergebnisse für ihren Browser, nach Type sortiert:// Anzahl verwendbarer MIME-Typen:
nmt = navigator.mimeTypes.length;for(i=0; i<nmt; i++) {
mti = navigator.mimeTypes[i];
}
type = mti.type; suffixes = mti.suffixes; description = mti.description; |
Live-
|
Unter-Objekt pluginsHier der vereinfachte Javascript-Code, rechts die Live-Ergebnisse für ihren Browser, nach plugin-Name sortiert:// Anzahl verwendbarer Plugins:
npl = navigator.plugins.length;for(var i=0; i<npl; i++) {
nse = navigator.plugins[i];
}
name = nse.name; filename = nse.filename; description = nse.description; |
Live-
|
|
Mit diesen Angaben wäre es möglich, dynamische Webseiten an die
jeweiligen Browser-Fähigkeiten anzupassen. Daher müssen sie die Analyse für M$IE meist durch VBscript (s.u.) ergänzen. |
SelfHTML: Das navigator-Objekt in Javascript Mozilla: Objekt-Index 'N' |
Javascript Objekt screenJavascript kann die Dimensionen des verwendeten Bildschirms erfassen. Die Eigenschaften width, height werden in Pixeln angegeben, die Farbtiefe colorDepth in Bit.Diese Daten sind für andere Programmiersprachen (z.B. Perl, PHP, ...) nicht direkt zugänglich. |
Monitor-Dimensionen
moni="+screen.width;
moni+='x'+screen.height;
moni+='x'+screen.colorDepth;
alert("Monitor:\n"+moni);
|
Javascript Eigenschaft document.referrerJavascript kann die Adresse der verweisenden Webseite (Referrer) erfassen. Der Text (String) kann leer sein, wenn der Referrer unbekannt ist (z.B. bei manueller Eingabe der Browser-Adresse).Dies ist die einzige Möglichkeit, den Referrer einer statischen Webseite zu ermitteln. Der Referrer von dynamischen Webseiten ist auch mit anderen Programmiersprachen (z.B. Perl, PHP, ...) zugänglich. |
Monitor-Dimensionen
ref="+document.referrer;
alert("Verweis hierher von\n"+ref);
|
VBscript |
|
|
Visual Basic (VB) wird in diesem Web nur in Sonderfällen verwendet,
da diese Programmiersprache ► kein Offener Standard ist, ► von einem einzigen Hersteller abhängig ist, ► entgegen allen Normen den Zugriff auf ihr lokales Dateisystem zulässt und ► nur auf dem Betriebssystem eines Herstellers funktioniert. |
Die Analyse der Browser-Fähigkeiten ist ein Sonderfall, da der Hersteller von
M$IE zu wenige der oben gezeigten Standardfunktionen unterstützt. ♦ Details zur Integration von VBscript in Webseiten und über die Zusammenarbeit mit Javascript finden sie auf der Webseite VBscript. |
|
►
Vor Verwendung von
→ VBscript muss geklärt werden, ob ihr Browser VBscript
"versteht". ► Das VBscript muss vor dem rechts gezeigten Javascript-Code definiert werden, da es von diesem bereits verwendet wird. ► Der Javascript-Code (Keine Funktion, dieses Javascript wird bereits im HTML-<head> ausgeführt.) legt die globale Variable vb_ok fest. Live- |
<script type="text/vbscript"> function vb_test() vb_test = 1
end function</script>
<script type="text/javascript">
var vb_ok=0;
</script>
try { vb_ok = vb_test(); } catch(e) {} |
|
Die Plugin-Analyse ist mühsam: Sie suchen nach Objekten, deren Namen (nach meinem Wissen) nirgends zuverlässig dokumentiert sind. ► Erstellen sie eine Liste (hier das Array obj_names) mit den Win-Objektnamen aller zu testenden Plugins. Die Win-Registry bietet Hinweise darauf, z.B. für SVG: HKEY_CLASSES_ROOT | .svg | Standard = Adobe.SVGCtl Unter den file-extensions anderer Dateitypen finden sie mit etwas Glück deren entsprechende Objektnamen. ► Die gezeigte Javascript-Funktion plugin_list_vb bearbeitet der Reihe nach alle Elemente des Arrays obj_names. Nicht ganz zufällig ist auch dieser Teil vorwiegend in Javascript erstellt - Ein entsprechendes VBA-Programm funktioniert zwar einwandfrei (z.B. mit M$Excel), lässt sich jedoch nur mühsam nach VBscript portieren. ► Die verbleibende VBscript-Funktion plugin_test_vb ist auf das absolute Minimum reduziert. Darin wird versucht, ein Objekt des angegebenen Namens zu erzeugen. Das logische Ergebnis (True oder False) wird an die aufrufende Javacsript-Funktion übergeben. |
<script type="text/javascript">
function plugin_list_vb() {
</script>
obj_names = new Array("Adobe.SVGCtl",
t="Test mit VBscript: <br> ";
"PDF.PdfCtrl", "AcroPDF.Pdf",
"QuickTime.mov", "ShockwaveFlash.ShockwaveFlash"); for(var i=0;i<obj_names.length;i++) {
objname=obj_names[i];
}t+="\n"+objname+": "; // VBscript-Anfrage:
ok=plugin_test_vb(objname);if(ok) {t+="ja <br> ";} else {t+="nein <br> ";} document.write(t);
<script type="text/vbscript">
Function plugin_test_vb(objname)
</script>
Dim test,ok
End Function
ok = False On Error Resume Next Set test = CreateObject(objname) If (Err.Number = 0) Then ok = True plugin_test_vb = ok |
|
Live-Demonstration:
Das rechts oben gezeigte Javascript plugin_list_vb wird jedoch
nur dann ausgeführt, wenn ihr Browser VBscript "versteht".
|
|
Objekt einbetten und analysieren |
|
| Eine elegante Möglichkeit, die Browser-Unterstützung für bestimmte → MIME-Types zu analysieren, bietet das <object>-Tag von HTML. | ♦ Details zur Verwendung von <object> |
|
So funktioniert der Trick:
► Fügen sie ein
Test-Objekt
der zu analysierenden
→
MIME-Type (hier: image/svg+xml) in die Webseite ein.
(Das Objekt kann auch unsichtbar sein).► Erzeugen sie mit dem Alternativ-Code einen → DOM-Knoten: Der HTML-Code innerhalb eines <object> wird nur dann ausgeführt, wenn der Browser das Test-<object> nicht anzeigen kann. Der alternative DOM-Knoten kann durch jedes beliebige HTML-tag (hier: <div>)erzeugt werden und sollte ein id-Attribut mit einem eindeutigen Namen enthalten. Der DOM-Knoten kann auch leer, d.h. unsichtbar bleiben. ► Starten sie nach (!) Aufbau der Webseite ein Javascript, welches nur nachzusehen hat, ob der alternative DOM-Knoten existiert. Dazu verwenden sie z.B. das Ereignis onLoad im <body>-tag. Funktioniert mit allen Browsern, allen Versionen, in allen Betriebssystemen. Erfordert keine Informationen über Eigenschaften des Browsers oder allfälliger Plugins. Vergleichsweise eringer Entwicklungs-Aufwand. Kann erst nach Aufbau einer Webseite eingesetzt werden. → Ist daher gut für eine Analyse-Webseite geeignet, mit deren Ergebnis nachfolgende dynamische Webseiten gesteuert werden, wenn sie Server-seitige Programmierung (→ PHP, → Perl, ...) anwenden. |
Beispiel: Test für
→ SVG-Objektgrafik
(vereinfacht - Details im Quelltext dieser Seite)
<html>
<head> <script type="text/javascript">
function node_check() {
</script>
nodeok=1;
}
try {
n=document.getElementById("nosvg");
}x=n.nodeType; nodeok=0; catch(e) {} if(nodeok) {alert("SVG ist ok !");} else {alert("Kein SVG ! ");} </head> <body onload="node_check()"> <div>SVG-Test:</div>
<object data="test.svg" type="image/svg+xml">
</body><div id="nosvg">Testknoten</div> </object> </html> |
|
Live-Demonstration:
Im Kasten rechts ist ein SVG-Test-<object> eingebettet.Das Javascript wird jedoch nicht (wie im Programm-Beispiel rechts oben) automatisch gestartet, sondern durch Klick auf diesen |
|
|
Letzte Änderung dieser Seite: 2011-11-30 13:01:25
|