Artikel - Detailansicht

Icon Aktuelles Erkennen von Javascript

Dass Javascript eine gute Ergänzung zu ColdFusion ist, wurde schön öfters erwähnt, doch leider wird Javascript nicht immer von allen Browsern unterstützt, bzw. ist nicht immer im Client-Browser eingeschaltet. Für den Webprogrammierer bedeutet das, auf diesen Fall vorbereitet zu sein und sicherzustellen, dass wenigstens die Grundfunktionen einer Webapplikation auch ohne Javascript funktionieren. Dazu muss man auf sicheren Wege ermitteln, ob im Browser Javascript aktiviert ist und gegebenen Falls umleiten. Auch kann es von Interesse sein, zu testen, ob nur eine bestimmte Javascript Version vorhanden ist um z. B. eine Website in DHTML-Version (mit Javascript 1.2) und eine Pure HTML-Version (mit Javascript < 1.2) anzubieten.
Die Browserversion abzufragen ist in diesem Fall nicht ratsam. Zwar kann man ermitteln, ob der Browser Javascript könnte, aber man kann so nicht feststellen, ob es ein- oder ausgeschaltet ist. Da man also auf Serverseite nicht allein entscheiden kann, ob ein benötigtes Javascript vorhanden ist, muss in jedem Falle der Browser bemüht werden.

1.Möglichkeit
Die erste Methode besteht aus reinem Javascriptcode.
Angenommen, wir haben 2 Webseiten, start_html.cfm ist eine Seite, die aus reinem HTML besteht und für alle Browser angezeigt werden soll, die kein Javascript aktiv haben. start_js.cfm ist die Startseite für Browser mit Javascript.In start_html.cfm setzt man jetzt in den HEAD-Bereich ein kleines Umleitungs-JS-Script.

  

<head>
<script language="JavaScript">
<!--
  top.location.replace("start_js.cfm"); // -->
</script>
</head>


Nun führt man den User zuerst auf start_html.cfm. Hat der User in seinem Browser Javascript aktiviert, wird beim Laden der Seite das Javascript im <HEAD> ausgeführt und der Browser auf die start_js.cfm umgeleitet. Im allgemeinen geht das so schnell, dass der User die erste Seite nicht zu Gesicht bekommt. Für ihn ist es so, als wäre er direkt auf diese Seite geleitet worden. Der replace() Befehl von Javascript leitet aber den Browser nicht einfach zu einer neuen URL um sondern ersetzt den jetzigen History-Eintrag in der URL Liste des Browsers durch die angegebene URL. Das bedeutet, wenn der User den Back Button an seinem Browser drückt, wird er nicht zu start_html.cfm zurückgeführt (auf der er ja zuerst war), sondern gleich zu den Seite vor start_html.cfm. Er merkt also auch hier nicht, dass eine Seite dazwischengeschaltet war.
Kommt der User auf start_html.cfm und hat kein Javascript (alter Browser oder ausgeschaltet) wird er nicht umgeleitet und er bekommt die ganze start_html.cfm zu sehen. Man sollte also hier seinen HTML Code unterbringen, der ohne JS funktioniert.
Es bietet sich in solchen Fällen an, bestimmt Blöcke, die in beiden Seiten-Versionen vorkommen als Includes auszulagern!

Man kann aber das Prinzip der Umleitung auch benutzen um z. B. eine DHTML-Version von einer normalen Version zu trennen. Da DHTML ab 4'er Browser funktioniert und diese Javascript Version 1.2 unterstützen, machen wir uns dieses Merkmal zu nütze. Das Umleitungsscript sieht diesmal ein klein wenig anders aus:

<head>
<script language="JavaScript1.2">
<!--
  top.location.replace("start_js.cfm");
// -->
</script>
</head>


Durch die Angabe von "Javascript1.2" im LANGUAGE-Attribut des SCRIPT-Tags wird das Script nur ausgeführt, wenn Javascript1.2 (und grösser) im Browser aktiviert ist. Kleinere Versionen (1.0, 1.1) führen den replace() nicht aus und die Seite wird im Browser sichtbar. Leider kann bei langsamen Leitungen und je nach Browsertyp doch kurtzzeitig etwas von der ersten Seite sichtbar sein. Besser und völlig unsichtbar für den User ist die Methode 2, die CFML-Code benutzt (aber andere Nachteile hat).

2. Möglichkeit
Dazu ist ein Formular nötig, dessen Antwort-Seiten für Browser mit und ohne JS verschieden sind. Das Formular übergibt ColdFusion einen FORM-Parameter, der Javascript im Browser kennzeichnet und man kann auf dem Server mit dem CFLOCATION-Tag darauf reagieren. Wir erzeugen dazu mal wieder ein HTML-Formular in der Seite foo.cfm:

<form action="foo.cfm" method="post">
  <script language="JavaScript">
   document.writeln('<input type="hidden" name="jsflag" value="Yes">');
  </script>

  <input type="submit" value="enter!">
</form>


Das Formular ruft sich selbst beim Absenden auf. Im Formular ist ein Stück JS-Code enthalten, der direkt beim Laden der Seite ausgeführt wird (im Browser!) und ein verstecktes Formularelement names jsflag und dem Wert "Yes" erzeugt (mit der Methode writeln() des JS-Objekts document kann man direkt in die Seite schreiben!). Beim Abschicken des Formulars wird mit diesem Formularelement in der Ergebnisseite die ColdFusion-Variable FORM.jsflag="yes" vorhanden sein, mit der man auf der Serverseite sicher feststellen kann, das JS vorhanden ist. Hat der User kein JS aktiv, wird auch kein Formularelement jsflag erzeugt und das Fehlen der Variable FORM.jsflag zeigt das Fehlen von JS vorhanden.
Der folgende Code prüft das Submit-Resultat und leitet entsprechend serverseitig(!) um.

<cfparam name="FORM.jsflag" default="No">
<cfif FORM.jsflag>
<!--- javascript lauft ---> 
  <CFLOCATION URL="js.cfm">
<CFELSE> 
  <!--- kein javascript --->
  <CFLOCATION URL="html.cfm">
</cfif>
 


Da die Variable FORM.jsflag ohne Javascript nicht vorhanden ist, erzeugt man am besten für diesen Fall einen Default-Wert. Dadurch hat man ein boolsches Ergebnis und kann vereinfacht im CFIF-Tag abfragen.

Auch hier lässt sich z.B. durch <script language="JavaScript1.2"> erreichen, das man zwischen DHTML-tauglichen und einfachen Seiten unterscheiden kann.



Steffen Goldfuss steffen@goldfuss.de - 17.10.2000

Zurück


Das deutsche ColdFusion-Forum cfml.de ist das Portal für Einsteiger und Experten zum Thema ColdFusion und der ColdFusion Markup Language (CFML).

© 2017 Webdesign & Hosting: CHC ONLINE Kassel | SOLVA Content-Management-System CMS
Urlaub-Angebote.de - Urlaub mit Bestpreis-Garantie buchen