arild++

Blogginnlegg

Hvor bør script-tagen plasseres i HTML?

Skrevet av Arild den 19. June, 2011 i Programmering, Webutvikling | 0 kommentarer

Når man skal kjøre et JavaScript på en HTML-side, er det mange som tror at plasseringen av script-tagene i dokumentet har lite å si. Det er altså feil. Mange er også av den oppfatning at script-tagene skal plasseres inne i head-tagen. Dette er bare delvis sant; ifølge DTD-en er det også fullt mulig å legge script-tagene inne i body-tagen.

Med denne kunnskapen i lomma har vi en gyllen anledning til å skrive mer oversiktlig JavaScript-kode.

Script-tag i head

La oss gå ut ifra denne koden:

<!doctype html>
<html lang="no">
	<head>
		<meta charset="utf-8">
		<title>Mitt HTML-dokument</title>
		<script type="text/javascript">
			window.onload = function() {
				var p = document.getElementById('mittAvsnitt');
				alert(p.innerHTML);
			}
		</script>
	</head>
	<body>
		<p id="mittAvsnitt">Denne setningen skal vises i en
		alert-boks ved hjelp av JavaScript.</p>
	</body>
</html>

(Merk: Jeg har skrevet JavaScriptet direkte inn i HTML-dokumentet. Dette er noe jeg ikke vil anbefale i vanlig praksis. Jeg har bare gjort det slik denne gangen for å forenkle eksemplet.)

Vi har her et stykke JavaScript som skal ha tilgang til et DOM-element (nemlig avsnittet vårt) og skrive ut hva som står inne i det i en alert-boks (linje 8-9). Når vi har et JavaScript som er avhengig av å kommunisere med DOM-en, og vi i tillegg plasserer script-tagen inne i head-tagen vår, er vi nødt til å pause JavaScriptet vårt og vente til hele HTML-dokumentet er ferdig innlastet. Først når det er konvertert til en DOM av nettleseren kan vi kjøre JavaScriptet vårt. Derfor bruker vi window-objektet sin onload-event, som sørger for at funksjonen vår ikke kjører før HTML-dokumentet er ferdig innlastet.

Script-tag i body

Denne typen sjekking er det derimot ikke behov for hvis vi plasserer scriptet vårt nederst i body-elementet. Regelen er at all HTML over script-tagen i dokumentet vil være ferdig innlastet før scriptet kjøres. Med andre ord: Hvis du setter scriptet nederst i body-tagen, betyr det at alt innhold i dokumentet vil være ferdig innlastet idet scriptet kjøres:

<!doctype html>
<html lang="no">
	<head>
		<meta charset="utf-8">
		<title>Mitt HTML-dokument</title>
	</head>
	<body>
		<p id="mittAvsnitt">Denne setningen skal vises i en
			alert-boks ved hjelp av JavaScript.</p>
		<script type="text/javascript">
			var p = document.getElementById('mittAvsnitt');
			alert(p.innerHTML);
		</script>
	</body>
</html>

Konklusjon

Scriptet ser nå en del ryddigere ut og er dessuten effektivisert. Jeg gjorde det også slik da vi så på import-funksjonen jeg skrev i JavaScript i dette blogginnlegget. Ettersom det ikke medfører noen ulemper å plassere scriptene våre nederst i body-tagen, er det ingen grunn til å la være å gjøre det. Altså er det trygt å innprente følgende setning:

Alle script legges i bunnen av HTML-dokumentet.

Script-tag i HTML5

Det bør likevel nevnes at script-tagen i HTML5 har fått et nytt attributt: async. Hvis denne settes til false, vil kjøringen av scriptet skje synkront, altså etter at HTML-koden er ferdig innlastet – uavhengig av hvor du plasserer script-tagen. Hva du gjør, er fullstendig opp til deg, men husk at det er en merkbar andel av verdens befolkning som fremdeles bruker nettlesere som ikke støtter HTML5.

Kommentarer

Skriv en kommentar