Flytte JavaScript ut av nettsiden
Finne skriptinnhold som skal flyttes
Getty Images/ermingut
Når du først skriver en ny JavaScript, er den enkleste måten å sette den opp på å legge inn JavaScript-koden direkte på nettsiden slik at alt er på ett sted mens du tester det for å få det til å fungere. På samme måte, hvis du setter inn et forhåndsskrevet skript på nettstedet ditt, kan instruksjonene fortelle deg om å legge inn deler av eller hele skriptet på selve nettsiden.
Dette er greit for å sette opp siden og få den til å fungere ordentlig i utgangspunktet, men når siden din fungerer slik du vil ha den, vil du kunne forbedre siden ved å pakke ut JavaScript til en ekstern fil slik at siden din innholdet i HTML-en er ikke så rotete med ikke-innholdselementer som JavaScript.
Hvis du bare kopierer og bruker JavaScript skrevet av andre mennesker, kan instruksjonene deres om hvordan du legger til skriptet deres på siden din ha resultert i at du har en eller flere store deler av JavaScript faktisk innebygd i selve nettsiden din, og instruksjonene deres forteller ingenting. hvordan du kan flytte denne koden ut av siden din til en egen fil og fortsatt ha JavaScript til å fungere. Men ikke bekymre deg, for uansett hvilken kode JavaScript du bruker på siden din, kan du enkelt flytte JavaScript ut av siden din og sette den opp som en separat fil (eller filer hvis du har mer enn ett stykke JavaScript innebygd i siden). Prosessen for å gjøre dette er alltid den samme og illustreres best med et eksempel.
La oss se på hvordan en del av JavaScript kan se ut når den er innebygd på siden din. Den faktiske JavaScript-koden din vil være forskjellig fra den som vises i de følgende eksemplene, men prosessen er den samme i alle tilfeller.
Eksempel én
|_+_|Eksempel to
|_+_|Eksempel tre
|_+_|Din innebygde JavaScript skal se omtrent ut som ett av de tre eksemplene ovenfor. Selvfølgelig vil den faktiske JavaScript-koden din være forskjellig fra den som vises, men JavaScript vil sannsynligvis bli innebygd på siden ved å bruke en av de tre metodene ovenfor. I noen tilfeller kan koden din bruke den utdaterte language='javascript' i stedet for type='text/javascript' i så fall kan det være lurt å oppdatere koden din mer til å begynne med ved å erstatte språkattributtet med type en.
Før du kan pakke ut JavaScript til sin egen fil, må du først identifisere koden som skal pakkes ut. I alle de tre eksemplene ovenfor er det to linjer med faktisk JavaScript-kode som skal trekkes ut. Skriptet ditt vil sannsynligvis ha mange flere linjer, men kan lett identifiseres fordi det vil oppta samme plass på siden din som de to linjene med JavaScript som vi har fremhevet i de tre eksemplene ovenfor (alle tre eksemplene inneholder de samme to linjene av JavaScript, er det bare beholderen rundt dem som er litt annerledes).
- Det første du må gjøre for å faktisk trekke ut JavaScript til en egen fil, er å åpne en ren tekstredigerer og få tilgang til innholdet på nettsiden din. Du må deretter finne den innebygde JavaScript-en som vil være omgitt av en av kodevariantene vist i eksemplene ovenfor.
- Etter å ha funnet JavaScript-koden, må du velge den og kopiere den til utklippstavlen. Med eksemplet ovenfor er koden som skal velges uthevet, du trenger ikke velge skripttaggene eller de valgfrie kommentarene som kan vises rundt JavaScript-koden din.
- Åpne en annen kopi av tekstredigeringsprogrammet (eller en annen fane hvis redigeringsprogrammet støtter åpning av mer enn én fil om gangen) og forbi JavaScript-innholdet der.
- Velg et beskrivende filnavn du vil bruke for den nye filen, og lagre det nye innholdet med det filnavnet. Med eksempelkoden er formålet med skriptet å bryte ut av rammer slik at et passende navn kan være framebreak.js .
- Så nå har vi JavaScript i en egen fil vi går tilbake til editoren der vi har det originale sideinnholdet for å gjøre endringene der for å lenke til den eksterne kopien av skriptet.
- Ettersom vi nå har skriptet i en egen fil, kan vi fjerne alt mellom skripttaggene i vårt originale innhold slik at
- Det siste trinnet er å legge til et ekstra attributt til script-taggen som identifiserer hvor den kan finne den eksterne JavaScript-en. Dette gjør vi ved å bruke en src='filnavn' Egenskap. Med vårt eksempelskript vil vi spesifisere src='framebreak.js'.
- Den eneste komplikasjonen til dette er hvis vi har bestemt oss for å lagre de eksterne JavaScriptene i en separat mappe fra nettsidene som bruker dem. Hvis du gjør dette, må du legge til banen fra websidemappen til JavaScript-mappen foran filnavnet. For eksempel, hvis JavaScript-ene blir lagret i en js mappe i mappen som inneholder nettsidene våre vi trenger src='js/framebreak.js'
Så hvordan ser koden vår ut etter at vi har skilt JavaScript ut i en egen fil? Når det gjelder JavaScript-eksemplet vårt (forutsatt at JavaScript og HTML er i samme mappe), lyder HTML-koden vår på nettsiden nå:
|_+_|Vi har også en egen fil kalt framebreak.js som inneholder:
|_+_|
Filnavnet og filinnholdet ditt vil være mye forskjellig fra det fordi du vil ha trukket ut det JavaScript som er innebygd på nettsiden din og gitt filen et beskrivende navn basert på hva den gjør. Selve prosessen med å trekke ut den vil være den samme uavhengig av hvilke linjer den inneholder.
Hva med de to andre linjene i hvert av eksempel to og tre? Vel, hensikten med disse linjene i eksempel to er å skjule JavaScript fra Netscape 1 og Internet Explorer 2, som ingen av noen bruker lenger, så disse linjene er egentlig ikke nødvendige i utgangspunktet. Plassering av koden i en ekstern fil skjuler koden for nettlesere som ikke forstår skriptkoden mer effektivt enn å omgi den i en HTML-kommentar uansett. Det tredje eksemplet brukes for XHTML-sider for å fortelle validatorer at JavaScript skal behandles som sideinnhold og ikke for å validere det som HTML (hvis du bruker en HTML doctype i stedet for en XHTML, så vet validatoren allerede dette og så disse taggene er ikke nødvendig). Med JavaScript i en separat fil er det ikke lenger noe JavaScript på siden som kan hoppes over av validatorer, så disse linjene er ikke lenger nødvendige.
En av de mest nyttige måtene JavaScript kan brukes til å legge til funksjonalitet på en nettside, er å utføre en slags behandling som svar på en handling fra den besøkende. Den vanligste handlingen du vil svare på vil være når den besøkende klikker på noe. Hendelsesbehandleren som lar deg svare på at besøkende klikker på noe kalles ved trykk .
Når de fleste først tenker på å legge til en onclick-hendelsesbehandler på nettsiden deres, tenker de umiddelbart på å legge den til en stikkord. Dette gir en kodebit som ofte ser slik ut:
|_+_|
Dette er feil måte å bruke onclick på med mindre du har en faktisk meningsfull adresse i href-attributtet, slik at de uten JavaScript blir overført et sted når de klikker på lenken. Mange mennesker utelater også 'return false' fra denne koden og lurer så på hvorfor toppen av den gjeldende siden alltid blir lastet etter at skriptet har kjørt (som er hva href='#' ber siden gjøre med mindre false returneres fra alle hendelsesbehandlere. Selvfølgelig, hvis du har noe meningsfullt som destinasjon for lenken, kan det være lurt å gå dit etter å ha kjørt onclick-koden, og da trenger du ikke 'return false'.
Det mange ikke er klar over er at onclick-hendelsesbehandleren kan legges til noen HTML-tag på nettsiden for å samhandle når besøkende klikker på det innholdet. Så hvis du vil at noe skal kjøres når folk klikker på et bilde, kan du bruke:
|_+_|
Hvis du vil kjøre noe når folk klikker på tekst, kan du bruke:
|_+_|Disse gir selvfølgelig ikke den automatiske visuelle ledetråden om at det vil være et svar hvis besøkende klikker på dem på samme måte som en lenke gjør, men du kan legge til den visuelle ledetråden selv ved å style bildet eller spennet på riktig måte.
Den andre tingen å merke seg om disse måtene å feste onclick-hendelsesbehandleren på er at de ikke krever 'return false' fordi det ikke er noen standardhandling som vil skje når elementet klikkes på som må deaktiveres.
Disse måtene å feste onclick på er en stor forbedring i forhold til den dårlige metoden som mange bruker, men det er fortsatt en lang vei fra å være den beste måten å kode den på. Et problem med å legge til onclick ved å bruke en av metodene ovenfor er at det fortsatt blander JavaScript inn med HTML-en. ved trykk er ikke et HTML-attributt, det er en JavaScript-hendelsesbehandler. Som sådan for å skille JavaScript fra HTML-en vår for å gjøre siden enklere å vedlikeholde, må vi få den onclick-referansen ut av HTML-filen til en separat JavaScript-fil der den hører hjemme.
Den enkleste måten å gjøre dette på er å erstatte onclick i HTML-en med en id som vil gjøre det enkelt å feste hendelsesbehandleren til riktig sted i HTML-en. Så vår HTML kan nå inneholde en av disse utsagnene:
|_+_|Vi kan deretter kode JavaScript i en egen JavaScript-fil som enten er koblet til bunnen av brødteksten på siden eller som er i hodet på siden og hvor koden vår er inne i en funksjon som selv kalles opp etter at siden er ferdig lastet . Vår JavaScript for å legge ved hendelsesbehandlerne ser nå slik ut:
|_+_|En ting å merke seg. Du vil legge merke til at vi alltid har skrevet onclick helt med små bokstaver. Når du koder setningen i HTML-en, vil du se at noen skriver den som onClick. Dette er feil ettersom navnene på JavaScript-hendelsesbehandlerne er små bokstaver og det ikke finnes en slik behandler som onClick. Du kan komme unna med det når du inkluderer JavaScript i HTML-taggen din direkte siden HTML ikke skiller mellom store og små bokstaver og nettleseren vil tilordne det til riktig navn for deg. Du kan ikke komme unna med feil bruk av store bokstaver i selve JavaScript-en din, siden JavaScript skiller mellom store og små bokstaver og det ikke finnes noe slikt i JavaScript som onClick.
Denne koden er en enorm forbedring i forhold til tidligere versjoner fordi vi nå både knytter hendelsen til det riktige elementet i HTML-en vår, og vi har JavaScript helt atskilt fra HTML-en. Vi kan forbedre dette enda mer.
Det eneste problemet som gjenstår er at vi bare kan knytte én onclick-hendelsesbehandler til et spesifikt element. Skulle vi på noe tidspunkt måtte knytte en annen onclick-hendelsesbehandler til det samme elementet, vil den tidligere vedlagte behandlingen ikke lenger være knyttet til det elementet. Når du legger til en rekke forskjellige skript til nettsiden din for forskjellige formål, er det i det minste en mulighet for at to eller flere av dem ønsker å gi noen behandling som skal utføres når det samme elementet klikkes på. Den rotete løsningen på dette problemet er å identifisere hvor denne situasjonen oppstår og å kombinere behandlingen som må kalles sammen til en funksjon som utfører hele behandlingen.
Mens sammenstøt som dette er mindre vanlige med onclick enn med onload, er det ikke den ideelle løsningen å måtte identifisere sammenstøtene på forhånd og kombinere dem. Det er ikke en løsning i det hele tatt når selve behandlingen som må festes til elementet endres over tid slik at noen ganger er det en ting å gjøre, noen ganger en annen, og noen ganger begge deler.
Den beste løsningen er å slutte å bruke en hendelsesbehandler helt og i stedet bruke en JavaScript-hendelseslytter (sammen med den tilsvarende attachEvent for Jscript- siden dette er en av de situasjonene der JavaScript og JScript er forskjellige). Vi kan gjøre dette enklest ved først å lage en addEvent-funksjon som vil legge til enten en hendelseslytter eller vedlegg avhengig av hvilken av de to som språket som kjøres støtter;
|_+_|Vi kan nå legge ved behandlingen som vi ønsker skal skje når elementet vårt klikkes på ved hjelp av:
|_+_|Å bruke denne metoden for å legge ved koden som skal behandles når et element klikkes på betyr at å gjøre et nytt addEvent-kall for å legge til en annen funksjon som skal kjøres når et spesifikt element klikkes på, vil ikke erstatte den tidligere behandlingen med den nye behandlingen, men vil i stedet tillate begge funksjonene som skal kjøres. Vi trenger ikke å vite når vi kaller en addEvent om vi allerede har en funksjon knyttet til elementet som skal kjøres når det klikkes på, den nye funksjonen kjøres sammen med og funksjoner som tidligere var knyttet.
Skulle vi trenge muligheten til å fjerne funksjoner fra det som kjøres når et element klikkes på, kan vi lage en tilsvarende deleteEvent-funksjon som kaller den aktuelle funksjonen for å fjerne en hendelseslytter eller vedlagt hendelse?
Den ene ulempen med denne siste måten å legge ved behandlingen på er at de virkelig gamle nettleserne ikke støtter disse relativt nye måtene å knytte hendelsesbehandling til en nettside. Det burde være få nok personer som bruker slike foreldede nettlesere nå til å se bort fra dem i det J(ava)Script vi skriver bortsett fra å skrive koden vår på en slik måte at den ikke forårsaker et stort antall feilmeldinger. Funksjonen ovenfor er skrevet slik at den ikke gjør noe hvis ingen av måtene den bruker støttes. De fleste av disse virkelig gamle nettleserne støtter heller ikke getElementById-metoden for å referere til HTML, og det er derfor en enkel if (!document.getElementById) returnerer false; på toppen av noen av funksjonene dine som gjør slike anrop vil også være passende. Selvfølgelig er mange som skriver JavaScript ikke så hensynsfulle til de som fortsatt bruker antikke nettlesere, og derfor må disse brukerne venne seg til å se JavaScript-feil på nesten hver nettside de besøker nå.
Hvilke av disse forskjellige måtene bruker du for å legge ved behandling til siden din som skal kjøres når de besøkende klikker på noe? Hvis måten du gjør det på er nærmere eksemplene øverst på siden enn eksemplene nederst på siden, er det kanskje på tide at du tenker på å forbedre måten du skriver onclick-behandlingen på for å bruke en av de bedre metodene presentert nederst på siden.
Når du ser på koden for hendelseslytteren på tvers av nettlesere, vil du legge merke til at det er en fjerde parameter som vi kalte uC , hvis bruk ikke er åpenbar fra den tidligere beskrivelsen.
Nettlesere har to forskjellige rekkefølger der de kan behandle hendelser når hendelsen utløses. De kan jobbe fra utsiden og innover fra taggen og inn mot taggen som utløste hendelsen, eller de kan jobbe fra innsiden og ut fra den mest spesifikke taggen. Disse to kalles fange og boble og de fleste nettlesere lar deg velge hvilken rekkefølge flere behandlinger skal kjøres i ved å angi denne ekstra parameteren.
- uC = sann til prosess under fangstfasen
- uC = falsk å behandle under boblefasen.
Så der det er flere andre tagger viklet rundt den som hendelsen ble utløst på fangstfasen, starter først med den ytterste taggen og beveger seg inn mot den som utløste hendelsen og så når taggen hendelsen ble knyttet til har blitt behandlet boblefasen reverserer prosessen og går ut igjen.
Internet Explorer og tradisjonelle hendelsesbehandlere behandler alltid boblefasen og aldri fangstfasen, og starter derfor alltid med den mest spesifikke taggen og jobber utover.
Så med hendelsesbehandlere:
|_+_|ved å klikke på xx ville boble ut og utløse varselet('b') først og varselet('a') etter det.
Hvis disse varslene ble vedlagt ved å bruke hendelseslyttere med uC true, ville alle moderne nettlesere bortsett fra Internet Explorer behandle varselet('a') først og deretter varselet('b').