JavaScript implementering

JavaScripts kerne ECMAScript beskriver sprogets syntaks og grundlæggende objekter;

DOM beskriver metoder og grænseflader til at håndtere webindhold;

BOM beskriver metoder og grænseflader til interaktion med browseren.

ECMAScript, DOM og BOM

Selvom ECMAScript er en vigtig standard, er det ikke det eneste del af JavaScript, naturligvis heller ikke den eneste del, der er standardiseret. Faktisk består en fuld JavaScript-implementering af følgende 3 forskellige dele:

JavaScript inkluderer ECMAScript, DOM og BOM

ECMAScript

ECMAScript er ikke bundet til nogen bestemt browser, faktisk nævner det heller ikke metoder til brugerinput/uddata (dette adskiller det fra sprog som C, som har brug for eksterne biblioteker til at udføre disse opgaver). Så hvad er ECMAScript? Beskrivelsen af ECMA-262 standard (2. afsnit) lyder som følger:

“ECMAScript kan levere kernefunktioner til skriptning i forskellige værte miljøer, og derfor er det kerneprogrammeringssprog adskilt fra enhver specifik værte miljø... ...”

Web-browsere er en værtsmiljø for ECMAScript, men de er ikke det eneste værtsmiljø. Faktisk findes der utallige andre forskellige miljøer (f.eks. Nombas' ScriptEase og Macromedia's ActionScript, der bruges samtidig i Flash og Director MX) der kan rumme ECMAScript-implementeringer. Så hvad bestemmer ECMAScript uden for browsere?

Kort sagt, ECMAScript beskriver følgende indhold:

  • Grammatik
  • Typer
  • Sætninger
  • Nøgleord
  • Reserverede ord
  • Operatorer
  • Objekter

ECMAScript er kun en beskrivelse, der definerer alle egenskaber, metoder og objekter for skriptsprog. Andre sprog kan implementere ECMAScript som en funktionel grundlinje, JavaScript er et eksempel på dette:

ECMAScript, JavaScript, ActionScript, ScriptEase

Hver browser har sin egen implementering af ECMAScript-grænsefladen, som derefter udvides med DOM og BOM (der vil blive diskuteret i de følgende afsnit). Der er selvfølgelig også andre implementeringer og udvidelser af ECMAScript-sprog, såsom Windows Script Host (WSH), Macromedia's ActionScript i Flash og Director MX, samt Nombas ScriptEase.

1. ECMAScript-versioner

ECMAScript er opdelt i flere forskellige versioner og defineres i en standard kaldet ECMA-262. Som andre standarder bliver ECMA-262 redigeret og opdateret. Når der er en betydelig opdatering, udgives en ny version af standarden. Den nyeste version af ECMA-262 er 5.1, der blev udgivet i juni 2011.

Den første version af ECMA-262 er i essens ens med Netscape's JavaScript 1.1, men med alle kodestykker relateret til browseren fjernet, samt nogle små justeringer. Først kræver ECMA-262 understøttelse af Unicode-standarden (for at støtte flere sprog). Andet kræver den, at objekter er platformuafhængige (Netscape's JavaScript 1.1 har faktisk forskellige objektimplementeringer, f.eks. Date-objektet, som er afhængigt af platformen). Dette er en af de vigtigste grunde til, at JavaScript 1.1 og 1.2 ikke opfylder ECMA-262's første version.

De fleste opdateringer i ECMA-262 anden udgave var af redaktionel art. Denne standardopdatering var til formål at opnå en streng enighed med ISO/IEC-16262, og der blev ikke tilføjet, ændret eller fjernet noget specifikt indhold. ECMAScript følger generelt ikke anden udgave.

ECMA-262 tredje udgave var den første virkelige opdatering af standarden. Den tilbyder opdateringer til behandling af strenge, fejldefinitioner og numeriske output. Samtidig tilføjer den understøttelse for regulære udtryk, nye kontrolinstruktioner, try...catch-undtagelseshåndtering samt nogle små ændringer for at gøre standarden internationaliseret. Generelt markerer det ECMAScript som et rigtigt programmeringssprog.

2. Hvad er ECMAScript-konformitet

I ECMA-262 har ECMAScript-konformitet (konformitet) en klar definition. Et skripsprog skal opfylde følgende fire grundlæggende principper:

  • Implementeringer, der opfylder kravene, skal følge beskrivelsen af støtte til alle "typer, værdier, objekter, egenskaber, funktioner og programmeringssprog samt semantik" (ECMA-262, første side)
  • Implementeringer, der opfylder kravene, skal understøtte Unicode-karaktærstandarden (UCS)
  • Implementeringer, der opfylder kravene, kan tilføje "ekstra typer, værdier, objekter, egenskaber og funktioner", der ikke er specificeret i ECMA-262. ECMA-262 beskriver disse tilføjelser som nye objekter eller nye egenskaber på objekter, der ikke er givet i specifikationen
  • Implementeringer, der opfylder kravene, kan understøtte "program- og regulært udtrykssprog" (som betyder, at det er muligt at erstatte eller udvide den indbyggede understøttelse af regulære udtryk)

Alle ECMAScript-implementeringer skal opfylde ovenstående standard.

3. ECMAScript-understøttelse i webbrowser

Netscape Navigator 3.0, der indeholder JavaScript 1.1, blev lanceret i 1996. Derefter blev JavaScript 1.1-specifikationen indsendt som et udkast til en ny standard til ECMA. Med JavaScript's eksplosive popularitet var Netscape meget glade for at begynde udviklingen af version 1.2. Men der var et problem: ECMA accepterede ikke Netscapes udkast. Kort efter lanceringen af Netscape Navigator 3.0 lancerede Microsoft IE 3.0. Denne versions IE indeholdt JScript 1.0 (navnet på Microsoft's egen implementering af JavaScript), som oprindeligt var planlagt til at kunne sammenlignes med JavaScript 1.1. Men på grund af ufuldstændige dokumenter og nogle upassende gentagne egenskaber nåede JScript 1.0 langt fra JavaScript 1.1's niveau.

Før ECMA-262 første udgave blev færdiggjort, blev Netscape Navigator 4.0 med JavaScript 1.2 udgivet i 1997. Senere på året blev ECMA-262-standarden accepteret og standardiseret. Derfor er JavaScript 1.2 ikke kompatibel med ECMAScript første udgave, selvom ECMAScript burde baseres på JavaScript 1.1.

JScript næste skridt var JScript 3.0, som blev introduceret i IE 4.0 (version 2.0 blev udgivet sammen med IIS 3.0, men var ikke inkluderet i browseren). Microsoft promoverede kraftigt, at JScript 3.0 var den første virkelig kompatible skriptsprog med ECMA-standarden. På det tidspunkt var ECMA-262 endnu ikke endeligt færdig, så JScript 3.0 oplevede samme skæbne som JavaScript 1.2 - det passede ikke op til den endelige ECMAScript-standard.

Netscape valgte at opgradere sin JavaScript-implementering i Netscape Navigator 4.06. JavaScript 1.3 gjorde Netscape endelig fuldt kompatibel med ECMAScript første udgave. Netscape tilføjede støtte til Unicode-standarden og sikrede, at alle objekter bevarede de nye funktioner, der blev introduceret i JavaScript 1.2, og blev platformuafhængige.

Da Netscape offentliggjorde sin kildekode som Mozilla-projekt, var det planen, at JavaScript 1.4 skulle integreres i Netscape Navigator 5.0. Dog blev en avantgardistisk beslutning - at designe Netscape's kode fra bunden af, ødelagde dette arbejde. JavaScript 1.4 blev kun udgivet som server-side skriptsprog for Netscape Enterprise Server, og blev aldrig integreret i browseren.

I dag følger alle mainstream Web-browsere ECMA-262 tredje udgave.

下面的表格列出了大部分流行的 Web 浏览器中的 ECMAScript 支持:

Browser DOM-kompatibilitet
Netscape Navigator 2.0 -
Netscape Navigator 3.0 -
Netscape Navigator 4.0 - 4.05 -
Netscape Navigator 4.06 - 4.79 Udgave 1
Netscape 6.0+ (Mozilla 0.6.0+) Udgave 3
Internet Explorer 3.0 -
Internet Explorer 4.0 -
Internet Explorer 5.0 Udgave 1
Internet Explorer 5.5+ Udgave 3
Opera 6.0 - 7.1 Udgave 2
Opera 7.2+ Udgave 3
Safari 1.0+/Konqueror ~ 2.0+ Udgave 3

DOM

DOM(文档对象模型)是 HTML 和 XML 的应用程序接口(API)。DOM 将把整个页面规划成由节点层级构成的文档。HTML 或 XML 页面的每个部分都是一个节点的衍生物。请考虑下面的 HTML 页面:

<html>
  <head>
    <title>Sample Page</title>
  </head>
  <body>
    <p>hello world!</p>
  </body>
</html>

这段代码可以用 DOM 绘制成一个节点层次图:

DOM node hierarki diagram

DOM 通过创建树来表示文档,从而使开发者对文档的内容和结构具有空前的控制力。用 DOM API 可以轻松地删除、添加和替换节点。

1. 为什么 DOM 必不可少

自从 IE 4.0 和 Netscape Navigator 4.0 开始支持不同形态的动态 HTML(DHTML),开发者首次能够在不重载网页的情况下修改它的外观和内容。这是 Web 技术的一大飞跃,不过也带来了巨大的问题。Netscape 和微软各自开发自己的 DHTML,从而结束了 Web 开发者只编写一个 HTML 页面就可以在所有浏览器中访问的时期。

业界决定必须要做点什么以保持 Web 的跨平台特性,他们担心如果放任 Netscape 和微软公司这样做,Web 必将分化为两个独立的部分,每一部分只适用于特定的浏览器。因此,负责指定 Web 通信标准的团体 W3C(World Wide Web Consortium)就开始制定 DOM。

2. DOM 的各个 level

DOM Level 1 blev foreslået af W3C i oktober 1998. Det består af to moduler, nemlig DOM Core og DOM HTML. Førstnævnte leverer en XML-baseret dokumentstruktur, så man kan få adgang til og operere med alle dele af dokumentet; sidstnævnte tilføjer nogle HTML-specifikke objekter og metoder, hvilket udvider DOM Core.

Bemærk, DOM er ikke kun JavaScript-ejede, faktisk har mange andre sprog implementeret det. Dog er DOM i webbrowserne implementeret med ECMAScript og er nu en stor del af JavaScript-sproget.

DOM Level 1 er kun et mål, nemlig at planlægge dokumentets struktur, mens målet for DOM Level 2 er meget bredere. Udvidelsen af den oprindelige DOM tilføjer understøttelse af muse- og brugergrænsefladehændelser (DHTML har omfattende støtte til dette), område, traversering (gentagne DOM-dokumentmetoder) og tilføjer understøttelse af CSS (cascading style sheets) gennem objektgrænseflader. Den oprindelige DOM Core, der blev introduceret på Level 1, tilføjer også understøttelse af XML-namespace.

DOM Level 2 introducerer flere nye DOM-moduler, der bruges til at håndtere nye grænsefladeTyper:

  • DOM-visning - beskriver sporing af forskellige visninger af dokumentet (dvs. før og efter CSS-stilisering)
  • DOM-hændelser - beskriver hændelsesgrænseflader
  • DOM-stil - beskriver grænseflader til at håndtere CSS-baserede stilarter
  • DOM-traversering og -område - beskriver grænseflader til at traversere og operere dokumenttræet

DOM Level 3 introducerer metoder til at indlæse og holde dokumenter på en ensartet måde (inkluderet i modulen DOM Load and Save) samt metoder til at validere dokumenter (DOM Validation), hvilket yderligere udvider DOM. På Level 3 udvides DOM Core til at understøtte alle XML 1.0-karakteristika, herunder XML Infoset, XPath og XML Base.

Når man lærer DOM, kan man møde nogen, der refererer til DOM Level 0. Bemærk, der findes ingen DOM Level 0-standard, det er kun en historisk referencemærke for DOM (DOM Level 0 refererer til den oprindelige DHTML, der blev støttet i IE 4.0 og Netscape Navigator 4.0).

3. Andre DOM

Udover DOM Core og DOM HTML har flere andre sprog udgivet deres egne DOM-standarder. Disse sprog er baseret på XML, og hver DOM tilføjer unikke metoder og grænseflader til det tilsvarende sprog:

  • Skalerbar vektorgrafik (SVG) 1.0
  • Digital markeringssprog (MathML) 1.0
  • Synkroniseret multimedieintegreringssprog (SMIL)

Bemærkninger:Hvis du ønsker at lære mere om relaterede emner, besøg CodeW3C's SMIL undervisning og SVG undervisning.

Derudover har andre sprog også udviklet deres egne DOM-implementeringer, såsom Mozillas XML-brugergrænseflade-sprog (XUL). Dog er kun de nævnte sprog W3Cs anbefalede standarder.

DOM-støtte i webbrowserne

DOM var allerede en standard, før webbrowserne begyndte at implementere den. IE forsøgte DOM første gang i version 5.0, men det var først med version 5.5, at den fik rigtig DOM-støtte, hvor IE 5.5 implementerede DOM Level 1. Siden da har IE ikke indført nye DOM-funktioner.

Netscape indførte først DOM-støtte med Netscape 6 (Mozilla 0.6.0). Mozilla har i øjeblikket den bedste DOM-støtte, hvor den har implementeret hele Level 1, næsten hele Level 2 og en del af Level 3. (Mozillas mål er at bygge en browser, der er 100% kompatibel med standarden, og deres arbejde har givet resultat.)

Opera indførte først DOM-støtte med version 7.0, og Safari har også implementeret de fleste af DOM Level 1. De er næsten på samme niveau som IE 5.5, og i nogle tilfælde endda overgår de IE 5.5. Dog er støtten til DOM betydeligt lavere end Mozillas. Tabellen nedenfor viser de almindelige browsere og deres støtte til DOM.

Browser DOM-kompatibilitet
Netscape Navigator 1.0 - 4.x -
Netscape 6.0+ (Mozilla 0.6.0+) Level 1, Level 2, Level 3 (delvis)
IE 2.0 - 4.x -
IE 5.0 Level 1 (minimum)
IE 5.5+ Level 1 (næsten hele)
Opera 1.0 - 6.0 -
Opera 7.0+ Level 1 (næsten hele) og Level 2 (delvis)
Safari 1.0+/Konqueror ~ 2.0+ Level 1

Bemærkninger:Hvis du ønsker at lære mere om DOM's viden, besøg CodeW3C's HTML DOM undervisning og XML DOM undervisning.

BOM

IE 3.0 og Netscape Navigator 3.0 tilbyder en funktion - BOM (Browser Object Model), som giver adgang til og manipulation af browservinduer. Ved hjælp af BOM kan udviklere flytte vinduer, ændre teksten i statuslinjen og udføre andre handlinger, der ikke er direkte relateret til sideindhold. BOM's enesteartikulære og ofte tvivlsomme egenskab er, at det kun er en del af JavaScript, og der er ingen relaterede standarder.

BOM håndterer hovedsageligt browservinduer og rammer, men browser-specifikke JavaScript-udvidelser betragtes ofte som en del af BOM. Disse udvidelser inkluderer:

  • Pop op et nyt browservindue
  • Flytte, lukke browservinduet og justere vinduesstørrelsen
  • Giver detaljerede oplysninger om webbrowseren via定位objektet
  • Giver detaljerede oplysninger om brugerens skærmopløsning via skærmobjektet
  • Support for cookies
  • IE udvidede BOM med ActiveXObject-klassen, som kan instansiere ActiveX-objekter via JavaScript

Der er ingen relaterede BOM-standarder, så hver browser har sin egen BOM-implementering. Der er nogle faktiske standarder, såsom at have et vindueobjekt og et navigationsobjekt, men hver browser kan definere egne egenskaber og metoder for disse objekter eller andre objekter.

Se: