# HTML-scripting

Met HTML-scripting (of soms client-side-scripting) worden scripts (meestal JavaScript) aangeduid die in de HTML-code van een document staan. De scripts zorgen ervoor dat de webpagina interactief wordt. Het is daartoe echter noodzakelijk dat de gebruikte webbrowser de scripttaal ondersteunt.

## Inleiding

In 1995 werd de Netscape Navigator-versie 2.0 uitgebracht, die als eerste browser ondersteuning bood voor scripts in HTML-documenten. De gebruikte scripttaal werd aanvankelijk Livescript en later JavaScript genoemd.
Met de introductie van JavaScript werd het mogelijk om de statische HTML-documenten een zekere interactiviteit te geven. Dit heeft in latere jaren geleid tot de lancering van Dynamic HTML en daarna tot nog verdere vergroting van de interactiviteit van HTML-documenten.
Microsoft kon in deze ontwikkeling niet achterblijven, en voorzag Internet Explorer van een vergelijkbare scripttaal. Omdat er toch kleine verschillen waren, bracht Microsoft de scripttaal uit onder de naam JScript. Vanaf versie 3.0, ondersteunt Internet Explorer niet alleen JScript, maar ook VBScript en (tot versie 5.x) perlscript.
De scripttalen die gebruikt worden in HTML-documenten, worden ook in andere toepassingen gebruikt. De talen worden elk besproken in hun eigen lemma.

## Browsers en scripts

Scripts kunnen overal in een HTML-document worden geplaatst. Er is een speciale HTML-tag die aangeeft dat het om een script gaat. In die tag kan worden aangegeven welke scripttaal wordt gebruikt, als er niets wordt aangegeven, wordt ervan uitgegaan dat het om JavaScript gaat.
De scripts in HTML-documenten communiceren met de browser (dus niet direct met het document). De meeste browsers hebben de optie om ondersteuning voor JavaScript uit te zetten. Omdat webpagina's soms scripts bevatten die de browser vragen om pop-ups te openen (meestal met reclame), kiest een deel van de gebruikers er voor om ondersteuning voor scripts uit te zetten.
De ondersteuning voor scripts moet in de browser zijn ingebouwd. Alle geavanceerde browsers ondersteunen JavaScript. De ondersteuning voor VBScript is beperkt tot Internet Explorer. Onder Windows gebruikt Internet Explorer de standaard interpreters die in Windows zijn ingebouwd (jscript.dll en vbscript.dll). In andere gevallen is de interpreter onderdeel van de installatie. Er zijn enkele onderlinge verschillen tussen de browsers in de interpretatie van JavaScript. Een andere mogelijke bron van verschillen in interpretatie van scripts is gelegen in gebruik van een ander model van het document door de browser (zie Document Object Model).

## Toepassingen van scripts in HTML

Scripts geven de browser opdracht om iets te doen. De browser kan daar op reageren door bijvoorbeeld een waarschuwing (alert) te tonen. De krachtige toepassingen liggen in opdrachten die betrekking hebben op het getoonde document. Via het Document Object Model kan de browser namelijk eigenschappen van dat document opvragen en aanpassen. Veel gebruikte toepassingen zijn:
* Controleren van een ingevuld formulier of validatie. Met een script kunnen de ingevulde gegevens in een formulier in een webpagina worden gecontroleerd voordat het formulier wordt verstuurd. Omdat deze controle op de computer van de gebruiker plaatsvindt, gaat dit veel sneller dan controle op de webserver na het versturen. Bovendien wordt de server minder belast, waardoor het ook voor andere gebruikers ondertussen sneller gaat. Overigens blijft controle op de webserver vaak nodig, omdat niet elke gebruiker de ondersteuning voor scripts heeft geactiveerd. Bovendien zijn een aantal gegevens alleen op de webserver te controleren, bijvoorbeeld of een ingevuld e-mailadres al eens eerder is gebruikt.
* Gebruik van cookies. Met scripts kunnen cookies in de browser worden geplaatst en weer teruggelezen.
* Ophalen van nieuwe informatie. Scripts kunnen de browser opdracht geven om nieuwe informatie op te halen van de webserver. Dat gebeurt vaak door een nieuw venster te openen, met daarin een nieuw document. Maar het is ook mogelijk dat de nieuwe informatie wordt opgeslagen als een variabele, en die vervolgens in het bestaande document wordt verwerkt.
* Aanpassingen van de stijl. De stijl van elementen van het document kan door middel van scripts worden aangepast. De toepassingen hiervan zijn legio.
* Dynamische menu's (als voorbeeld van aanpassing van stijl). Veel webpagina's maken gebruik van dynamische menu's, zodat de gebruiker nieuwe (onderliggende) keuzes ziet verschijnen als de muis over een hoofdkeuze wordt gezet.
Een interessante oefening in HTML-scripting is Wolfenstein 5k, een driedimensionale first-person shooter geschreven in JavaScript met een code van slechts 5119 bytes (dat is vergelijkbaar met een middellang Wikipedia-artikel). Het was een inzending in de competitie van de 5k organisatie in 2002. Deze organisatie had genoeg van te grote webpagina's vol met filmpjes en plaatjes, en daagde iedereen uit om een goede webpagina te maken die kleiner was dan 5 kilobyte.

## Events en bubbling

De interactiviteit die door HTML-scripts wordt geboden, is gebaseerd op het opvangen van gebeurtenissen (naar het Engels meestal events genoemd). Er zijn twee veroorzakers van events: de gebruiker en de browser. De events van de gebruiker worden veroorzaakt door input via muis en toetsenbord. De events van de browser zijn gerelateerd aan het ophalen van nieuwe documenten (bijvoorbeeld "het document is nu geladen" of "het document wordt nu afgesloten"). Zie ook Lijst van HTML-events.
De afzonderlijke elementen van een document kunnen gevoelig gemaakt worden voor de verschillende events. Op het moment dat zo'n event dan plaatsvindt, reageert het element door een taak uit te voeren die met de scripttaal is aangegeven.
Het begrip bubbling komt van pas in situaties waar een element van het document gelegen is in een ander element. Als de gebruiker klikt op een plaatje dat in een tabel staat, is dat dan een klik op het plaatje of een klik op de tabel? Het is in eerste instantie een klik op het plaatje, maar de klik wordt doorgegeven aan alle bovengelegen (parent) elementen. Dat proces van doorgeven heet bubbling. In het geval dat deze bubbling ongewenst is, kan het met code worden gestopt.

## Sandbox security model

HTML-scripts staan in documenten die meestal van het internet worden binnengehaald. Om de gebruiker te beschermen tegen ongewenste code, hebben zulke scripts slechts beperkte rechten. Ze mogen scripts bijvoorbeeld niets op de harde schijf van de gebruiker lezen of aanpassen, zijn netwerkvoorzieningen alleen indirect beschikbaar en geldt wat de browser en webpagina's zelf betreft het "same origin" beginsel. Dit is belangrijk, omdat de gebruikte talen wel volledige programmeertalen zijn. Als zelfstandig programma hebben ze voldoende mogelijkheden om bestanden te lezen en aan te passen. Een dergelijke bescherming wordt een sandbox (zandbak) genoemd: de scripts krijgen een terrein toegewezen waar ze geen kwaad kunnen. Ook plug-ins die bij browsers kunnen worden geïnstalleerd draaien in zo'n sandbox. De meeste veiligheidsproblemen van browsers hebben te maken met lekken in deze sandbox.