Websiteentwicklung: XHTML: Skripte

Aus Wikibooks

Auch anwenderseitige Skripte können auf Inhalte von XHTML-Dokumenten angewendet werden. XHTML sieht keine spezifische Skriptsprache vor, die interpretiert werden müßte. Das W3C selbst stellt nur mit dem DOM (Dokument-Objekt-Modell) Strukturen bereit, in welchen Skriptsprachen agieren können. Das W3C selbst hat keine Skriptsprache spezifiziert. Von ECMA wird allerdings eine Spezifikation für einen Skriptsprachen-Prototyp spezifiziert, welcher mehr oder weniger in einer Sprachenfamilie umgesetzt wird, die im allgemeinen Sprachgebrauch als java-script bezeichnet wird.

Da mit Skriptsprachen der Inhalt oder die Verfügbarkeit von Inhalt manipuliert werden kann, ist von Autoren besonders auf Zugänglichkeit und Barrierefreiheit von Dokumenten zu achten, die solche Skripte verwenden, denn der Autor kann weder davon ausgehen, dass ein Darstellungsprogramm eine bestimmte Skriptsprache oder alle Funktionen einer solchen interpretieren kann, noch kann er davon ausgehen, dass der jeweilige Nutzer die Skriptinterpretation überhaupt erlaubt.

Die Elemente noscript und script stehen in Verbindung mit anwenderseitigen Skriptsprachen, welche also gegebenenfalls vom Darstellungsprogramm interpretiert oder ausgeführt werden. Während script dazu dient, Quelltext von Skriptsprachen zu beinhalten oder auf externe Skript-Dokumente zu verweisen, dient noscript der Angabe von alternativem Inhalt für den Fall, dass die verwendeten Skriptsprachen nicht interpretiert werden. noscript kann also Strukturen beinhalten, die angezeigt werden, wenn Skripte nicht ausgeführt werden.

Das Konzept ist allerdings nicht besonders durchdacht, denn man kann nicht angeben, für welche Skriptsprache oder welche Version davon die Alternative gelten soll. Der Elementinhalt ist also generell nur zu interpretieren, wenn Skripte nicht interpretiert werden, etwa weil die Interpretation von Skripten der verwendeten Sprache vom Nutzer deaktiviert ist oder gar nicht implementiert ist.

Neuere Konzepte gehen hingegen von einem Schichtenmodell aus, welches kein Element noscript benötigt. Die erste Schicht ist dabei die des eigentlichen Inhaltes. Darin wird mit XHTML unabhängig der Interpretation von Stilvorlagen oder Skripten der gesamte Inhalt barrierefrei zugänglich gemacht. Die zweite optionale Schicht ist die der Stilvorlagen. Mit dieser kann eine alternative Darstellung des Inhaltes der ersten Schicht erreicht werden, am eigentlichen Inhalt wird nichts geändert. Die dritte optionale Schicht ist die der anwenderseitigen Skriptsprachen. Ähnlich wie mit der der Stilvorlagen kann damit eine alternative Darstellung des Inhaltes der ersten Schicht erreicht werden, insbesondere auch stark interaktiv. Auch die zweite Schicht kann mit den Skripten modifiziert werden, sofern vorhanden. Die Schichtenfolge ist dabei immer so zu gestalten, dass der Inhalt immer verfügbar gehalten wird. Also egal, nur die Inhaltsschicht interpretiert wird oder die Inhaltsschicht samt Stilvorlagen oder die Inhaltsschicht samt der Skripte oder auch Inhalt, Stilvorlangen und Skripte zusammen, der Zugang zum gleichen Inhalt muß immer möglich sein. Dieser Ansatz wird auch der unaufdringliche (englisch: unobtrusive) genannt, weil der Inhalt immer zugänglich bleibt, egal ob oder welche Schichtebene zusätzlich zur Inhaltsebene interpretiert wird oder nicht.

Skripte können in diesem Sinne hilfreich und nützlich eingesetzt werden, wenn sie die Ergonomie eines komplizierteren Dokumentes oder Projektes für jene Nutzergruppen verbessern, bei denen solche Skripte interpretiert werden. Die meist verwendete Skriptsprache vom Typ 'application/javascript', die konkrete Umsetzungen oder auch proprietäre Erweiterungen von 'application/ecmascript' darstellen, hat allerdings in der Praxis das Problem, dass verschiedene Darstellungsprogramme dies unterschiedlich umgesetzt haben. Das hat zur Folge, dass auch innerhalb eines Skriptes die unaufdringliche Strategie fortgesetzt werden muß, indem immer wieder abgefragt werden muß, ob spezielle Funktionalitäten verfügbar sind.

Bei größeren Inhaltsmengen könnte etwa mit einem Skript Inhalt ausgeblendet werden und bei Bedarf auf bestimmte Ereignisse hin wieder eingeblendet. Bei sehr größeren so zu verwaltenden Inhaltsmengen kann der primäre XHTML-Inhalt dann auch aus einem Navigationsmenü bestehen, welches viele Dokumente referenziert, auf welche der Inhalt verteilt ist. Das Skript wiederum könnte dieses Navigationsmenü ausblenden und stattdessen eine interaktive Bedienung anbieten, bei der der Nutzer die Inhalte bei Bedarf etwa mit der Technik 'AJAX' im selben Dokument einblenden kann oder mehrere Inhalte flexibel darauf anordnen kann.

Mit der alten Methode würde bei diesem Beispiel also das Navigationsmenü in einem Element noscript stehen. Über das DOM würde dann das Skript alle weiteren Bedienelemente erzeugen und den alternativen Zugang zum Inhalt per Skript ermöglichen. Bei dem neuen Konzept ist das Navigationsmenü einfach ohne Skript vorhanden und wird vom Skript dann zum Dokumentbeginn über das DOM ausgeblendet. Somit wird zum Ausblenden dieselbe Schicht verwendet, die auch für die alternative Bedienung verantwortlich ist. Diese Vermeidung der Vermischung der Ebenen kann dann auch für den Autor die Übersichtlichkeit stark verbessern, unter welchen Umständen welcher Inhalt wie dargestellt wird.


Element noscript[Bearbeiten]

noscript kann Blockelemente beinhalten, die angezeigt werden, wenn Skripte nicht ausgeführt werden. Allgemein verwendbare Attribute können verwendet werden, spezifische hat das Element nicht.

noscript kann sowohl als Blockelement als auch als inzeiliges Element verwendet werden. Wie bei anderen Elementen mit solch einer Sonderstellung ist jedoch zu empfehlen, die Struktur entsprechend anzupassen, also zu vermeiden, inzeilige und Blockelemente auf derselben inhaltlichen Ebene zu mischen.


Element script[Bearbeiten]

Das Element script referenziert entweder ein externes Dokument in anwenderseitigen Skripten oder beinhaltet selbst solche Skripte (z.B. JavaScript).

Der Inhalt ist aus Sicht von XHTML interpretierter Text. Besondere Zeichen von XML, insbesondere >, < und &, sind also zu maskieren oder innerhalb eines CDATA-Bereiches zu notieren, sofern sie sonst einen Konflikt mit der XML-Syntax hervorrufen. Das ist etwa der Fall, wenn die Skriptsprache wie java-script keine XML-Syntax hat, also auch keine Elementmarkierungen hat, > und < aber in anderem Zusammenhang verwendet werden.

script kann sowohl als Blockelement als auch als inzeiliges Element verwendet werden. Zudem oder insbesondere kann es im Element head notiert werden.

Das allgemein verwendbare Attribut id kann verwendet werden. Dazu gibt es noch einige Attribute, die spezifisch für dieses Element sind:

Attribut type[Bearbeiten]

Mit dem erforderlichen Attributtype wird der Inhaltstyp der verwendeten Skriptsprache notiert. Anhand dieser Angabe kann das Darstellungsprogramm dann entscheiden, ob der Inhalt von script überhaupt interpretiert wird oder gleich pauschal übersprungen, falls die Sprache nicht interpretierbar ist oder per Voreinstellung des Nutzers nicht interpretiert werden soll.

Beispiele für Werte sind etwa 'application/javascript' (veraltet auch: 'text/javascript') und 'application/ecmascript' oder auch 'text/tcl'.

Attribut src[Bearbeiten]

Mittels src kann ein externes Dokument mit einem Skript als Inhalt referenziert werden. In der Regel ist das Element selbst dann leer. Der Wert ist eine URI. Ist diese vorhanden, wird gegebenenfalls vorhandener Elementinhalt ignoriert und gegebenenfalls das Skript interpretiert, welches im referenzierten Dokument steht.

In der praktischen Anwendung jenseits von Lehrbeispielen in Büchern wie diesem ist es meist angemessen, Skripte so auszulagern, um sie klar vom eigentlichen Inhalt des Dokumentes zu trennen.

Zu beachten: Das Darstellungsprogramm wird das referenzierte Skript fast immer ohne vorherige Nachfrage beim Nutzer von der angegebenen Quelle zu laden versuchen. Beim Aufruf einer externen Quelle mittels absoluter URI gelangt so Information ohne Wissen des Nutzers auf den externen Dienstrechner. Aufgrund der möglichen Komplexität von Skripten besteht so ein Potential, dass der Nutzer durch diese Hintertür durch das referenzierte Skript ausspioniert wird. Zudem besteht die Möglichkeit, dass das externe Skript in den Datenfluß eingreift und eigentlich vertrauliche Informationen abgreift und für eigene, intransparente Zwecke verwendet, unkontrolliert weiter verbreitet. Autoren der lokalen Seite haben keinerlei Kontrolle über Änderungen der externen Skripte, dortige Sicherheitslücken etc. Externe Skripte stellen also ein hohes Risiko für die Nutzer einer Seite dar, ebenso allerdings für den Seitenbetreiber, welcher diese Skripte so auf die Besucher seiner Seite losläßt.

Hinsichtlich des Datenschutzes und der Privatsphäre des Nutzers ist dies ein massiver Eingriff, folglich also unbedingt zu vermeiden. Ist trotzdem eine externe Referenzierung erwünscht, ist im Sinne des Datenschutzes zuvor ein von dem Sachverhalt nicht betroffenes Dokument vorzuschalten, in welchem der Nutzer über das massive Datenleck informiert wird, welches vermutlich dazu führt, dass auf den betroffenen Seiten keine Vertraulichkeit des Datenaustausches mehr gewährleistet ist. Natürlich sollte auch eine lokale Alternative zur Auswahl angeboten werden, welche ohne derartige Skripte und Datenlecks auskommt, damit sich der Nutzer frei entscheiden kann, ob er ausspioniert werden möchte oder besser nicht.

Üblich sind etwa derartige externe Skripte für statistische Zwecke, allerdings auch als sogenannte 'frameworks' für massiv interaktive Anwendungen. Google etwa bietet solche Skripte und Bibliotheken an, primär um Informationen über Personen und deren Verhalten im Netz zu sammeln und kommerziell zu nutzen. Der Nutzen für die Autoren, welche solche Sammlungen referenzieren, dürfte folglich nur Lockvogel sein, um an Daten zu kommen.

Attribut charset[Bearbeiten]

Ist src gesetzt, so kann mit charset die Kodierung des referenzierten Dokumentes angegeben werden. Das kann zur Wirkung kommen, wenn sonst keine qualifizierte Instanz Angaben zur Kodierung des referenzierten Dokumentes macht. Der Wert ist eine Kodierungsangabe, siehe auch das gleichnamige Attribut von a oder link.

Attribut defer[Bearbeiten]

Das Attribut kann angegeben werden, um zu kennzeichnen, dass der Elementinhalt keinen weiteren Inhalt erzeugt, also keinen weiteren Einfluß auf die unmittelbare Darstellung hat. Ein Darstellungsprogramm muß dann nichts abwarten, sondern kann gleich mit der Darstellung des Dokumentes fortfahren.

Der Wert von defer ist 'defer'.