JavaScript Objekt Gjenkjenning

Norsk oversettelse av Peter-Paul Koch sin side om JavaScript Objekt Gjennkjennelse

Du oppdager ganske snart at enkelte JavaScript funksjoner ikke fungerer i visse nettlesere. Om du vil bruke mer avanserte script, må du først sjekke om nettleseren støtter JavaScript objektene som skal brukes. Denne siden forklarer hvordan det gjøres. Vennligst bemerk: denne siden er en norsk oversettelse, laget med permisjon, av Peter-Paul Koch sin JavaScript Objekt Gjennkjennelse side, beliggende her http://www.quirksmode.org/js/support.html

Innehold

Nettleser gjenkjenning - Nei

Vil du vite om en nettleser støtter enkelte objekter som skal brukes i koden din, burde du ALTID bruke nettleser gjenkjenning script. Jada, du vet gjerne at en nettleser ikke støtter koden din mens på andre fungerer den helt fint. Men hva med andre nettlesere som ikke er så vanlige?

Selv om nettleser gjenkjenning fungerer bra nok for 90% av brukerne dine så vil enkelte nettlesere bli behandlet feil, i tillegg til muligheten at framtidige nettlesere heller ikke blir behandlet korrekt. Resultatet blir enten en mengde feilmeldinger fra nettleseren, eller et script som ikke blir brukt selv om nettleseren egentlig kan kjøre den uten problemer. I begge tilfeller snyter du brukerne dine og koder dårlig.

Case study: mouseovers

En gammel case study avklarer mer. Dette eksemplet er ikke særlig et problem lenger, men prinsippene er fremdeles gyldige. Det er velkjent at Explorer 3 ikke støtter document.images array'et, noe som er påkrevd av script som bruker mouseover. Derfor må man forhindre at scriptet kjøres i Explorer 3. En løsning er å bruke nettleser gjenkjenning for Explorer 3 og sørge for at funksjonene ikke kjøres med Explorer 3.

Hvis du bare bruker nettleser gjenkjenning for Explorer 3, så får Netscape 2 brukerne dine bare en mengde med feilmeldinger.

Så hvorfor legger man ikke Netscape 2 til nettleser gjenkjenneren din? Fordi det løser ingenting.

Netscape 2 på OS / 2 er nesten helt Netscape 3-kompatibel, og handler mouseover-effekter bra. Likevel er effekten vanligvis ikke synlige fordi webdesigneren brukte nettleser gjenkjenning og valgte at Netscape 2 kan umulig støtte mouseovers. Således blir brukerne dine snytt for interaksjon uten god grunn. En god objekt gjenkjenner ville ha unngått disse problemene.

Til slutt - flere og flere nettlesere gir brukeren muligheten til å justere identifikasjonen til nettleseren deres til hva som helst (se nettleser gjenkjenning siden). Derfor er det meget mulig at en nettleser gjenkjenner ikke fungerer korrekt og utelukker den fra funksjonalitet som den kan håndtere uten problemer. Igjen snyter du brukerne dine for en ekstra bit av interaksjon. Enda verre er det dårlig koding.

Er JavaScript versjonsnumre mer pålitelige?

JavaScript versjoner - Nei

Når JavaScript ble laget så var Netscape fullt klar over at fremtidige nettlesere kom til å støtte flere object enn eksisterende, og at webdesignere burde kunne skille mellom gamle og nye nettleserer.

Den opprinnelige planen var at JavaScript versjonsnummeret skulle sjekkes. Enkelte object skulle bare støttes av JavaScript 1.et-eller-annet. Du skulle bare måtte bruke JavaScript versjonsnummeret i <script< tag'en din, så blir den kjørt kun av nettleserer som støtter objektet.

Men når Microsoft kom inn i bildet gikk denne ideen til helvete. Selv om de første Netscape 4 og Explorer 4 versjonene støttet JavaScript 1.2, kan ikke engang den mest kreative fantasi forestille at de støttet den samme JavaScript 1.2'en. Med dette så ble versjonnummerer utdaterte og irrelevant for objekt gjenkjenning.

Så bruk ikke JavaScript-versjonnummer. De fungerer ikke.

Objekt gjenkjenning - Ja

I stedet sjekker vi bare om nettleseren støtter object'en vi vil bruke (method, array eller property). La oss fortsette med mouseover eksempelet.

Skriptet påkrever et document.images array, så vi må først og fremst sjekke om nettleseren støtter det . Dette gjøres med;

if (document.images) 
{ 
	gjør noe med document.images array'et 
}

Nå har du en ikke sikker metode for å se om en nettleser kan håndtere mouseovers. If-erklæringen betinger om document.images array'et eksisterer. Om det eksisterer så blir (document.images) true (sant) og skriptet kjøres. Hvis document.images array'et ikke finnes blir det false (usant) og skriptet kjøres ikke.

En annen vanlig gjenkjenning metode er window.focus. Dette er en method (en kommando som du forteller JavaScript å gjøre noe for deg). Om vi vil bruke method, må vi først sjekke, om nettleseren støtter method'en som vi vil bruke.

Merk den rette måten å gjøre dette på: du spør om method uten parentes. Denne koden

if (window.focus)

betyr: "Hvis focus method'en er støttet", mens denne koden

if (window.focus())

betyr: "Hvis du kan sette fokus på vinduet" og antar at focus method'en er støttet. Hvis ikke, så får du feilmeldinger med denne linjen. Parentesene () kjører faktisk focus kommandoen, noe vi ikke ønsker i dette tilfellet. Så vi sjekker det først uten parentes (for å se om den finnes) og kun om sjekken blir true (sant) vil kommandoen faktisk kjøres, ved å legge parentes:

if (window.focus) window.focus ()

Poenget

Så hele poenget er at hvis du vil bruke array'et document.images, må du først sjekke om den er støttet. Hvis du vil bruke focus metoden i vinduet, må du først sjekke om den er støttet.

Hvis du alltid bruker object gjenkjenning får du aldri feilmeldinger med skriptene dine, selv om de kanskje ikke vil fungere uansett i enkelte nettlesere.