# Browser sniffing

Browser sniffing is het bepalen van de gebruikte webbrowser en een aantal andere eigenschappen, zoals schermgrootte, in een webpagina. Dit is soms nodig omdat de verschillende webbrowsers anders omgaan met stijl en lay-out en interactieve elementen in de HTML-code. In principe zou elke browser zich moeten houden aan de W3C-specificaties, maar in de praktijk voldoet geen enkele browser daar 100% aan.
Het gebruik van alleen de useragent geeft onvoldoende en onpraktische informatie. Daarom worden er aanvullende tests uitgevoerd, meestal op de capaciteiten van JavaScript. Een bekend voorbeeld is een browser capability test, waarmee bijvoorbeeld gedetecteerd kan worden of de huidige browser Internet Explorer is:
Het resultaat van browser sniffing is een aantal variabelen, waarvan elk een verschillend aspect van de gebruikte browser representeert. Veelgebruikte variabelen zijn bijvoorbeeld:
* isIE (geeft aan of de browser een versie van Internet Explorer is)
* isNN (geeft aan of de browser een versie van Netscape Navigator is)
* iMainVersion (hoofdversie van de browser)
De conclusie van een aantal tests kan dan zijn dat de gebruikte browser bijvoorbeeld Internet Explorer-versie 5 is of Netscape-versie 6. Als dat bekend is, kan de gebruiker een pagina worden voorgeschoteld die aangepast is aan de mogelijkheden van de browser. Vaak wordt de gebruiker dan doorverwezen naar een andere, speciaal voor die browser gemaakte, pagina.
Er is een groot aantal scripts voor browser sniffing op het internet te vinden.

## Server-side sniffing

Bovenstaand voorbeeld maakt gebruikt van client-side sniffing. Dat betekent dat de code om te bepalen welke browser het is, in de browser zelf wordt uitgevoerd.
Het is ook mogelijk om op de webserver aan browser sniffing te doen, omdat de browser bij het verzoek om een pagina te tonen (http request), zelf zijn useragent meestuurt. Op de server wordt dan aan de hand van de waarde van de useragent bepaald welke browser het is.

## Beperkingen

Browser sniffing is op zijn best een aanvullende methode om de capaciteiten van de browser te bepalen. Er zijn nog steeds websites te vinden die ervan uitgaan dat er maar twee browsers bestaan: Internet Explorer en Netscape. Als de gebruiker een andere browser gebruikt, bijvoorbeeld Opera, Safari of Mozilla Firefox, dan is er geen speciale pagina beschikbaar en wordt er niets of een zeer eenvoudige pagina getoond. Dit is het logische gevolg van het feit dat er met browser sniffing alleen rekening gehouden kan worden met browsers die op dat moment bestaan, er kan geen rekening worden gehouden met toekomstige browsers.

## Alternatief

Het beste alternatief voor browser sniffing is uitsluitend testen of de in de webpagina gebruikte capaciteiten in de browser aanwezig zijn (dat maakt de test onafhankelijk van het feit of de browser bekend is of niet). Een simpel (en heel oud) voorbeeld daarvan is het gebruik van roll-overs (een ander plaatje tonen als de gebruiker met zijn muis over een menu-item gaat). Er waren indertijd browsers die dat niet ondersteunden en in plaats daarvan een foutmelding gaven.
Ook deze methode heeft nadelen, sommige browsers passeren de test wel, maar ondersteunen de uit te voeren acties toch niet. Vooral browsers die nog sterk in ontwikkeling zijn, hebben te maken met dit mankement. Deze methode geldt bovendien uitsluitend voor interactieve elementen, een foutieve interpretatie van CSS kan hiermee niet worden opgespoord.