HTML5
DOM
AJAX
HTML
Børre Stenseth
DOMParser >DOMSite

En site med DOM-import

Hva

Når vi skal bygge en website med flere mer eller mindre forskjellige sider hat vi mange muligheter. Vi kan gjøre som jeg har gjort på denne siten, nemlig å lage enkeltstående sider som referer hverandre. Siden sidene er bygget med en felles template er denne løsningen akseptabel. En fordel er at hver side kan bokmerkes for seg. Alternativet er at vi holder oss på en side og bytter innhold på siden basert på brukerens handlinger eller andre årsaker. Det er det siste vi skal se på her. Vi bruker AJAX til å hente egne filer som DOM-objekter. Disse parses og innholdet plasseres/fordeles der vi vil ha det.

Websiden Sjakk er i sin helhet bygget etter denne metoden.

Vi ser på et enkelt eksempel:

Du kan teste løsningen her https://borres.hiof.no/wep/htm/dparsesite/demo1.html

Struktur

Strukturen i dette enkle eksempelet er slik:

struktur

Alle filene er komplette HTML-filer og kan åpnes separat. I dette tilfellet har vi gjort det enkelt: Alle filene har en header, footer og en content-seksjon som er den dynamiske biten. Det er lett å se at dette kan utvides med mange, ulike strukturer på enkeltkomponentene. Det vi altså gjør er å hente PART-filene content inn i DEMO-sidens content.

DEMO-fil

_demo1.html

en PART-fil

_part1.html

Kode

Alle filene kan inneholde javascript-kode. DEMO-fila, hvis head-element alltid er tilstede, inneholder referanser til kode som alltid bør være tilgjengelig.

_demo1.js

alternativt kan vi bruke jQery til AJAX-kall.

_demo2.js

Eksempelet blir da slik:

Løsning med jQuery https://borres.hiof.no/wep/htm/dparsesite/demo2.html

Noen betrakninger

I skrivende stund tillater FireFox (versjon 47.0.1) at vi kjører denne strukturen med AJAX-tilgang lokalt på vår egen maskin. Dette gjør det enklere å utvikle dersom vi er avhengig av VPN for å editere og teste.

Jeg har brukt synkron AJAX-access i eksempelet. Dette er ike alltid like lurt, JQuery mener vi skal la være. Løsningen over er ikke avhengig av dette. I noen situasjoner må vi kanskje passe litt på timingen dersom vi skal kjøre asynkront.

Det kan være hensiktsmessig å utstyre komponentfilene (PARTS) med komplette headinger, med globale scriptreferanser, dersom de skal testes hver for seg.

[1]
Referanser
DOMParser >DOMSite