!

Dette materialet blir ikke lenger vedlikeholdt. Du vil finne oppdatert materiale på siden: http://borres.hiof.no/wep/

Børre Stenseth

Javascript

Hva
JavaScript

Javascript har sine røtter hos Netscape og er definert som ECMA-script. Se ECMA-script på Wikipedia [1] og ECMA [2]

JavaScript er et objektorientert språk. Det er ikke en "lightversjon" av Java. JavaScript brukes i hovedsak for å programmere dynamikk på vevsider. Opp gjennom årene har JavaScript blitt vurdert på forskjellig måte. Noen har dømt språket til en snarlig død, mens andre har vært mer entusiastisk. JavaScript er idag etablert som det eneste alternativet for programmering i nettlesere. Språket inngår som en nødvendig del av alle resonnementer om dynamikk på vevsider og handterer både dokumentstruktur (HTML) og stilsett (CSS) og JavaScript er verktøyet som kontrollerer tilgang til import av materiale til en vevside via XMLHttpRequest, AJAX (Asynchronous JavaScript And XML). Det dukker stadig opp biblioteker skrevet i JavaScript for ymse formål og vi ser en økende fleksibilitet i arbeidsdelingen mellom klient og tjener.

Alt dette forutsetter at nettleseren legger forholdene til rette for at vi kan nå alle komponenter på vevsiden som objekter i Javascript, og at vi kan fange opp og respondere på begivenheter. Når mulighetene for å gjøre flere ting i JavaScript øker er det sjelden fordi vi får en ny versjon av selve språket, det skyldes at parseren i nettleseren eksponerer ny objekter, nye egenskaper ved objekter eller ny begivenheter. HTML5 utvider repetoaret av muligheter kraftig, vi har fått nye begivenheter å respondere på, vi har fått nye elementer og nye egenskaper, også ved gamle elementer. DOM (Document Object Model) er utvidet.

For de som vil sette seg godt inn i Javascript synes dette å være en god bok: JavaScript, The definitve Guide[3]. Det du finner på disse sidene er ikke på noen måte laget slik at det yter språket full rettferdighet. Det er satt sammen som en slags førstehjelpspakke for å kunne løse relativt enkle, nødvendige og oversiktlige problemer.

Det er viktig å merke seg at når vi bruker JavaScript på klienten så kjører vi i det som ofte kalles en "sandbox", altså en lukket omgivelse. Vi kan ikke lese eller manipulere data på selve klienten, vi kan bare nå det som er koplet til selve nettleseren og det dokumentet den viser. Det er to unntak fra dette:

  • Vi kan sette cookies på klientmaskinen slik at nettleseren husker fra en kjøring til den neste. Denne mekanismen kan også handteres med localStorage eller sessionstorage i HTML5.
  • Vi kan browse filsystemet på klienten når via input-elementer med type="file". Her er det brukeren som har kontroll og som browser. Vi kan ikke fra Javascript plukke opp annet enn det valget brukeren treffer.

Generelt kan vi notere oss at JavaScript har en syntaks som ligner ganske mye på Java. Vi har variable, men ikke typer. Vi har arrayer og de viktigste kontrollstrukturene som if-else, repeat, for, while. Vi kan drive unntaksprogrammering, try-catch-finally.

I de følgende modulene vil vi ta opp de vanligste anvendelsene av JavaScript på vevsider.

Det finnes et svært stort antall vevsider på nettet med løsningsforslag i form av JavaScript-kode for de forunderligste problemer og finurligheter. Mange av kodeeksemplene du finner er skrevet for gamle nettlesere og er unødig kompliserte. Vær litt kritisk til en del av denne koden. Ofte kan den både forenkles og gjøres mer robust.

Plassering av JavaScriptet

Vi kan i prinsipp plassere javaScript-kode hvor vi vil på en HTML-side. Koden skal pakkes inn i script-elementer.

<script type="text/javascript">
  function myfunction()
  {
    ...
  }
</script>

Normalt samler vi koden i head-elementet på en HTML-side. Fordelen er da at scriptet er på plass når resten av siden lastes og eventuelt forsøker å bruke det.

Det finnes imidlertid en del situasjoner der det er lettere å tenke omvendt, nemlig at hele eller deler av siden er lastet før vi introduserer javascript-komponenter.

Det er ofte en god ide å legge skriptet på en fil for seg og la nettleseren hente det når siden lastes:

<script type="text/javascript" src="mycode.js"></script>

Det er to grunner til dette. Den ene grunnen er den åpenbare at vi kan vedlikeholde skriptet ett sted selv om det brukes på mange sider. Den andre grunnen er at vi sparer litt tid ved at skriptfila caches og altså ikke trenger å lastes hver gang sider lastes.

Dersom vi inkluderer skriptet på selve siden er anbefalt å maskere javaskriptkoden slik at den ikke parses som en del at det HTML-dokumentet er plassert på. Dette kan vi gjøre slik:

<script type="text/javascript">
//<![CDATA[
function f()
{
  T='';
  for(ix=1; ix < 4; ix++)
    T+=ix;
  alert(T+' : kjør');
}
//]]>
</script>

På denne måten unngår vi at tegn som < og > i skriptet blir tolket som en del av dokumentstrukturen.

Testing og debugging

Noen enkle mekanismer for å debugge:

  • Alle nettlesere som er aktuelle har mulighet for å sette opp et eget vindu som rapporterer feil i JavaScript som kjøres på siden. Jeg pleier å bruke Tools - Error Console i FireFox. Du finner tilsvarende under Tools - Advanced på nye Operaversjoner, og du finner Tools - Developer Tools i nye Internet Explorer versjoner. Chrome har tilsvarende.

  • Det er en grei strategi å bruke alert() funksjonen for å rapportere status på variable under kjøring.

    s=myVar.toString();
    alert(s);
    
  • Ellers er det mulig å skrive verdier direkte til vevsiden. Det kan være nyttig i en testfase.

    document.write('<p>Nå er vi her</p>');
    
  • Eller vi kan dumpe verdier i en node på en vevside mens vi tester. F.eks. slik:

    function dumpArray(A)
    {
      res='';
      for (ix=0;ix<A.length;ix++)
        res+=A[ix]+'<br/>';
      document.getElementById('dump').innerHTML=res;
    }
    

Mer om systematisk testing av Javascript i modulen: JStesting

Referanser
  1. ECMAScript Wikipedia en.wikipedia.org/wiki/ECMAScript 14-03-2010
  1. ECMA ECMA International www.ecma-international.org/ 14-03-2010
  1. JavaScript, The Definite Guide David Flanagan 2011 O'Reilly 978-0-596-80552-4
  1. Introduction to JavaScript Peter-Paul Koch QuirksMode.org www.quirksmode.org/js/ 14-03-2010
  1. JavaScript Tutorial WebMonkey http://www.webmonkey.com/category/javascript/ 14-03-2010
  1. JavaScript Kit JavaScript Kit www.javascriptkit.com/jsref/ 14-03-2010
  1. JavaScript Quick reference Infinite Software Solutions www.devguru.com/Technologies/ecmascript/quickref/javascript_intro.html 14-03-2010
  1. JavaScript Tutorial howtocreate www.howtocreate.co.uk/tutorials/javascript/ 14-03-2010
  1. JavaScript, noen temaer Dev Shed www.devshed.com/c/b/JavaScript/ 14-03-2010
  1. HTML DOM Document Object W3C www.w3schools.com/htmldom/dom_obj_document.asp 14-03-2010
  1. Javascript Debugging Guide The JavaScript Source javascript.internet.com/debug-guide.html 14-03-2010
  1. Javascript Random J R Stockton J R Stockton www.merlyn.demon.co.uk/js-randm.htm 14-03-2010
  1. Lyd i JavaScript UCL www.phon.ucl.ac.uk/home/mark/audio/play.htm 14-03-2010
  1. JsUnit, testing jsunit.net www.jsunit.net/ 14-03-2010
  1. mochikit Javascript bibliotek mochikit mochikit.com/ 14-03-2010
  1. prototype Javascript bibliotek prototypejs.org www.prototypejs.org/ 14-03-2010
  1. JavaSript Tutorial Tutorials Point www.tutorialspoint.com/javascript/index.htm 14-09-2010
Vedlikehold

B Stenseth, revidert september 2009

( Velkommen ) ( Litt om språket )