Sie haben JavaScript deaktiviert. Vermutlich sind Sie ein Kollege und wollen nur sehen, ob meine Website auch ohne JavaScript funktioniert.
Andernfalls: Bitte aktivieren Sie JavaScript!
Hinweis:
Dieser Artikel ist älter als 18 Monate / wurde seit 18 Monaten nicht aktualisiert. Dies kann (muss aber nicht) dazu führen, dass der Artikel, und / oder darin beschriebene Techniken, nicht mehr aktuell sind. Bitte berücksichtigen Sie diesen Hinweis bei der Lektüre.
Wie setzt man JavaScript richtig ein? Was ist beim Einsatz von JavaScript zu bedenken und zu berücksichtigen? Und wie ist das mit der Barrierefreiheit von JavaScript?
6.3 Sorgen Sie dafür, dass Seiten verwendbar sind, wenn Scripts, Applets oder andere programmierte Objekte abgeschaltet sind oder nicht unterstützt werden.
Diese Vorschrift wurde häufig fehlinterpretiert, und fälschlicherweise geschlussfolgert:
"JavaScript ist nicht barrierefrei."
Mit JavaScript wurde und wird aber auch tatsächlich viel Unfug getrieben:
- ungefragt und unerwartet neue Fenster (popups) öffnen,
- Browser in die Vollbildanzeige zwingen,
- das Kontextmenü deaktivieren,
- die Statusleiste missbrauchen, etc.
Schlimmer: Flyout-Navigationsmenüs und andere MouseOver-Ereignisse, die nur mit der Maus ausgelöst werden können, und Webseiten für Tastaturnutzer unbenutzbar machen.
Mathias Schäfer hat unter dem Pseudonym molily dazu eine schöne Abhandlung erstellt.
molilys Fazit:
Wenn Sicherheitslücken in Browsern entdeckt werden, ist in den meisten Fällen JavaScript im Spiel.
Anmerkung: Die richtige Schlussfolgerung daraus lautet aber nicht: JavaScript deaktivieren! sondern: Browser updaten!
Das schlimmste denkbare Szenario ist Cross Site Scripting (XSS). Eine Beschreibung, wie XSS funktioniert, einschließlich einer Demo, hat Heise online gestellt.
Das größte Sicherheitsrisiko von JavaScript ist die Abhängigkeit von globalen Variablen, insbesondere von impliziten globalen Variablen.
Quelle: JSLint
Fazit: JavaScript selbst ist nicht böse, aber es kann von bösen Buben als Werkzeug verwendet werden, Böses anzustellen.
Um diesen bösen Buben das Handwerk zu legen, muss der Webworker die möglichen Fehlerquellen kennen, und durch "richtiges" Scripting vermeiden.
Sind nicht-JavaScript-fähige UAs (Browser) noch im Einsatz? Wohl eher nicht, wenn man mal von Textbrowsern wie Lynx absieht.
Und wenn JavaScript deaktiviert ist? Nun, die "JavaScript-Deaktivierer" (z. B. mittels der Firefox-NoScript-Extension) sollten wissen, was sie tun.
Oder sind Screen Reader unreif für JavaScript?
Das, in den meisten aktuellen Screen Readern, wohl am häufigsten auftretende "Fehlverhalten" dürfte sein, dass der Screen Reader Nutzer klickt und erwartet, dass "etwas passiert": entweder auf eine neue Seite zu kommen bzw. zum ausgewählten Inhalt zu springen. In vielen Fällen wird jedoch erstmal nichts passieren.
Quelle: protofunc.com/category/javascript/ajax
Warum passiert anscheinend (für Screen Reader Nutzer) nach einem Klick nichts?
aria-live-Regionen sind ein mächtiges Werkzeug, um auch Screen Reader Nutzern zu signalisieren, dass "etwas passiert" ist.
Beispiel: Ein AJAX Chat signalisiert einkommende Nachrichten mit einem Signalton. Wenn ARIA verfügbar ist, wird (zusätzlich) die einkommende Nachricht selbst vorgelesen. – Progressive Enhancement.
Aktuell unterstützen leider nur wenige Screen Reader ARIA live-regions:
Jaws 10.0 mit Firefox 3.x, und der kostenlose Screen Reader NVDA.
Untersucht wurden u. a. die deutschen Top 20 gemäß Alexa
Wenn es die "Großen" tun - kann man JavaScript also bedenkenlos einsetzen?
Nun wollen wir mal sehen, ob und wie wir aus dem potenziell bösen JavaScript gutes JavaScript machen.
Das Wissen um die Notwendigkeit, Stuktur (HTML) und Design / Präsentation (CSS) zu trennen, ist inzwischen glücklicherweise weit verbreitet. Nun separieren wir auch noch die Verhaltensebene (JavaScript).
Design (CSS) | Verhalten (JavaScript) |
Strukturierter Inhalt (HTML) |
Separation of functionality (the "behavior layer") from a Web page's structure/content and presentation.
separating code into Model, View, and Controller
JavaScript ist ein mächtiges Werkzeug um Webseiten mehr Leben einzuhauchen und sie für den Besucher einfacher bedienbar zu machen.
- Es steht über der Seitenstruktur "Was ist dieser Text?" (HTML)
- und dem Seitenstil "Wie soll das Element dargestellt werden" (CSS).
- JavaScript ist die dritte Ebene - das Verhalten "Was macht dieses Element?"
Russ Weakley verwendet in seinem Webstandards-Workshop (deutsche Übersetzung) die ideale Seitenstruktur folgendes Diagramm, um die Trennung der 3 Schichten zu illustrieren:
Die Fähigkeit eines Systems, kontrolliert auf Fehler zu reagieren.
Mit Graceful degradation wird die Eigenschaft eines (Computer-)Systems bezeichnet, auf Fehler und unerwartet eintreffende Ereignisse sicher und angemessen zu reagieren: Ein Fehler im Einzelsystem reduziert die Funktionalität des Gesamtsystems nur schrittweise, etwa durch eine verminderte Qualität oder einen reduzierten Funktionsumfang.
Beispiele:
Progressive Enhancement bei Wikipedia
Progressive Verbesserung (engl. progressive enhancement) beschreibt eine Methode im Webdesign, die Barrierefreiheit, semantische Auszeichnung und Trennung von Information und Präsentation beinhaltet, um eine Website auch für Endgeräte benutzbar zu machen, die nur über eingeschränkte Funktionen (JavaScript-/CSS-/Flash-Unterstützung) verfügen. Die Philosophie dahinter ist, dass Webseiten grundsätzlich mit jedem Webbrowser und jeder Art Internetverbindung in ihrer grundlegendsten Form - der Bereitstellung von Information - zugänglich sein sollten und Benutzern mit besserer Bandbreite und fortgeschritteneren Browsern mit erweiterter Funktionalität eine verbesserte Version der Seite dargestellt wird.
Progressive Enhancement bedeutet, ein System so zu konzipieren, dass es a priori nicht zu einem Fehlverhalten kommt.
Beispiele für Progressive Enhancement gefällig?
Besser als Chris Heilmann in seinem Vortrag (in englischer Sprache) JavaScript "Best Practices" kann man es nicht darstellen.
Die Quintessenz dieses Vortrags:
JavaScript wird erwachsen. Aus einem Werkzeug für Spielereien wird ein Werkzeug zur Erstellung ernsthafter Anwendungen.
JavaScript Best Practices gleichen häufig denen in anderen Programmiersprachen:
– Kapselung und Trennung der Ebenen,
– Vermeidung von globalen Variablen,
– Sinnvolle Namenskonventionen,
– Verwendung von geeigneten Entwurfsvorlagen,
– und von systematischen Tests.
Diese Grundsätze sind unverzichtbar bei der Entwicklung großer Anwendungen, wurden aber in der JavaScript-Programmierung bisher zu wenig beachtet. Die Beachtung dieser Grundsätze ist unverzichtbar, wenn JavaScript den Übergang von einer "Spielzeug-Sprache" zu einem Instrument für ernsthafte Entwicklung schaffen soll.
Testen Sie Ihre Scripts, bevor es Ihre Kunden tun!
Der kleinste Scriptfehler kann ihre ganze Site für einen bestimmten Client unbrauchbar machen.
Erarbeiten Sie sich eine Strategie, wie Sie mit möglichst wenig Aufwand bei jeder Änderung alle notwendigen Tests durchführen können.
JSlint deckt gnadenlos das größte Sicherheitsrisiko, nicht initialisierte globale Variablen auf.Warning! JSLint will hurt your feelings.
Wie so oft: Schlechte Beispiele sind leichter zu finden als gute.
Nein, ich werde jetzt nicht eines der zahlreichend Dreamweaver-DropDown-Menüs zeigen, die die Existenz von Untermenüs nur mit aktiviertem Javascript verraten.
Im Gegenteil: Ein Menü, das nur durch Deaktivieren! von Javascript zugänglich wird – böses JavaScript in Hochform.
Die Google-Webmastertools setzen ein Menü mit "Klappfunktion" ein. Screenshot:
Nach dem Anklicken der mit einem Pluszeichen (Grafik) bezeichneten Überschriften öffnet sich eine Art Untermenü. Screenshot:
Leider sehen diese Überschriften nur aus wie Links. Sie sind aber keine Links, und daher mit der Tastatur nicht erreichbar. Wie so oft: Eine einzige Unsauberkeit, und die Seite ist für eine ganze Benutzergruppe nicht bedienbar! Erst wenn man JavaScript deaktiviert, wird das Menü aufgeklappt und mit der Tastatur bedienbar. Screenshot:
Schauen Sie sich mal das Kapitelverzeichnis am Anfang dieses Artikels an. Auch dort gibt es die "Klappfunktion". Erkennbar an [+] (erweitern) (Natürlich nur, wenn JavaScript verfügbar ist.) Und wenn Ihr Screen Reader ARIA unterstützt (empfohlen: Jaws 10.0 oder NVDA und Firefox ab Version 3) wird nach Klick auf den Link die Änderung zu [-] (reduzieren) korrekt angesagt.
Klar, dieses Beispiel ist konstruiert, und dient hier nur der Demonstration.
Es gibt sinnvollere Anwendungen für die "Klappfunktion".
Die hier gezeigte Methode, ein dropdown-Menü zu erstellen, muss keineswegs besser sein, als andere Techniken.
Es soll nur eine Anwendung der in diesem Artikel vorgestellten Methoden aufgezeigt werden.
Detaillierte Beschreibung des Scripts auf einer eigenen Seite.
Artikeltexte und Code-Snippets: Creative Commons CC BY-SA 4.0
Medien (Bilder, Videos, Audios) sind evtl. urheberrechtlich geschützt.
Über Ihren Kommentar zu diesem Artikel freue ich mich.
Wenn Sie aber Fragen haben, und eine Antwort erwarten, nutzen Sie bitte das Supportforum! Die Nutzung des Forums ist auch ohne Registrierung möglich.