Detectarea obiectelor

Vezi sectiunea 3C a the book.

 

In curand veti observa ca anumite trasaturi ale JavaScript nu functioneaza in anumite browsere. Daca doriti sa folositi un script mai avansat, trebuie sa verificati prima oara daca un browser suporta obiectele pe care vreti sa le folositi. Aceasta pagina va explica cum sa faceti.

Detectarea browserului - Nu

Daca vreti sa stiti daca browserul care reda pagina voastra suporta anumite obiecte pe care le folositi in cod, Nu trebuie sa folositi NICIODATA un browser detect. Sigur, stiti ca browserul asta si celalalt va suporta codul pe cand altele nu il vor suporta. Dar alte browsere, cele obscure?

Chiar daca detectarea browserelor functioneaza bine pentru 90% din vizitatorii vostrii, alte browsere obscure nu vor fi tratate corect si browserele care apar dupa ce ati scris pagina ar putea sa aiba niste incompatibilitati. Rezultatul ar fi aparitia fie unui sir de eroari sau un script care nu este chemat chiar daca browserul este compatibil cu el. In ambele cazuri, va trisati utilizatorii si programati incorect.

Studiu de caz: mouseover

Un caz mai vechi de studiu va clarifica lucrurile. In zilele noastre acest exemplu nu mai este o problema, dar principiile raman valide.

Este cunoscut faptul ca IE 3 nu suporta matricea document.images care este vitala pentru un script mouseover. De aceea trebuie sa prevenim scriptul sa fie executat in IE 3. O solutie ar fi sa facem o detectare a browserului pentru IE 3 si sa nu execute functiile daca utilizatorul vede pagina cu IE 3.

Totusi, pe majoritatea OS, Netscape 2 nu suporta nici el document.images. Daca faceti doar o detectare de browser pentru IE 3, lasati utilizatorii Netscape 2 susceptibili unui sir de erori.

Deci de ce nu adauga Netscape 2 la detectarea browserului? Pentru ca nu rezolva nimic.

Netscape 2 pe OS/2 este aproape complet compatibil Netscape 3 si poate manipula efecte mouseover. Chiar si asa efectele nu sunt de obicei vizibile pentru ca dezvoltatorii web au folosit o detectare de browser si au decis ca Netscape 2 nu suporta nicicum mouseover. De aceea au privat utilizatorii de putina interactiune fara un motiv anume. O detectare facuta cum trebuie ar fi evitat aceste probleme.

In sfarsit, din ce in ce mai multe browsere ofera utilizatorului posibilitatea sa isi ajusteze sirul de identificare al browserului la orice ii convine (vezi pagina browser detect). De aceea este posibil ca detectarea browserului sa nu recunoasca browserul lui si de aceea sa il excluda din functionalitate lucru pe care nu poate sa il faca fara probleme. Aici, din nou, privam utilizatorii de ceva interactiune. Si mai rau, e programare deficitara.

Sunt numerele de versiuni JavaScript mai de baza?

Versiunile JavaScript - Nu

La conceperea JavaScript, Netscape a fost constient ca browserele viitoare vor suporta mai multe obiecte decat cele vechi, si ca dezvoltatorii web ar trebui sa poata sa faca distinctie intre browserele vechi si cele noi.

Planul original a fost verificarea numarului de versiune a JavaScript. Fel de fel de obiecte puteau fi suportate numai de versiunea JavaScript 1ceva. Folosirea numarului de versiune a JavaScript in tag-ul <script> in browser care nu suporta obiectul nu va executa scriptul.

Totusi, cand Microsoft a intrat pe piata, aceasta idee a plecat la abator. Chiar daca versiunile anterioare Netscape 4 si IE 4 suportau ambele JavaScript 1.2, nici chiar cea mai puternica fantezie nu poate reda faptul ca ambele suportau acelasi JavaScript 1.2 . Cu aceasta, numerele de versiuni au devenit invechite si irelevante fata de detectarea obiectelor.

Deci nu folositi numere de versiune JavaScript. Sunt inutile.

Detectarea obiectelor - Da

In loc de asta, verificam doar daca browserul suporta obiectul (metoda, matricea sau proprietatea) pe care vrem sa le folosim. Sa continuam cu exemplul mouseover. Acest script se bazeaza pe matricea document.images, deci prima data va trebui sa detectam daca brwserul o suporta. Acest lucru este facut de

if (document.images)
{
	do something with the images array
}

Acum aveti o metoda de siguranta sa verificati daca browserul poate manipula mouseover. Declaratia if verifica daca matricea document.images exista. Daca exista (document.images) este true si scriptul este executat. Daca imaginea matricii nu exista atunci devine false si scriptul nu este executat.

O alta detectare comuna este pentru window.focus. Aceasta este o metoda (o comanda prin care ii spunem JavaScript sa faca ceva pentru noi). Daca vrem sa folosim metoda, va trebui sa verificam prima data daca browserul o suporta.

Notati calea corecta de a face asta: intrebati de metoda fara paranteze. Acest cod

if (window.focus)

inseamna: "Daca metoda focus este suportata", atunci acest cod

if (window.focus())

inseamna: "Daca poate sa puna focus pe fereastra " si presupune ca focus este suportat. Daca nu este, aceasta linie de cod creaza erori. Parantezele() executa de fapt comanda focus, lucru pe care nu il dorim in acest caz. Deci o verificam fara paranteze(vedem daca exista) si numai atunci cand browserul zice ca e bine executam de fapt comanda adaugand paranteze:

if (window.focus) window.focus()

Scopul

Deci tot scopuleste ca daca doriti sa folositi matricea document.images, prima oara verificati daca este suportata. Daca doriti sa folositi metoda focus a ferestrei, prima oara verificati daca este suportata.

Daca folositi mereu detectarea obiectului, scripturile voastre nu vor genera niciodata erori, chiar daca ar putea sa nu functioneze in anumite browsere.

 Porta Script   Chicago Hardwood flooring