“User Agent” script til bestemmelse af browser og browserversion

Man kan tage højde for hvilken browser brugerne anvender, på to måder: ved at tjekke for egenskaber der er specifikke for enkelte browsere eller ved at undersøge den tekststreng som alle browsere sender ved en forespørgsel til web serverne om at se en web side — den såkaldte User Agent streng.

Den første metode er velkendt. F.eks. ser man ofte følgende eller lignende browserbestemmelese der bygger på at kun Internet Explorer understøtter egenskaben document.all og at W3C DOM metoden document.getElementById() først blev implementeret i Internet Explorer version 5:

var IE = (document.all)?true:false;
var IE4_min = (document.all&&!document.getElementById)?true:false;
var IE5_plus = (document.all&&document.getElementById)?true:false;
var NS4 = (document.layers)?true:false;
var DOM = (document.getElementById&&!document.all)?true:false;
document.write ('Du anvender nu følgende browser: ');
if (IE4_min) {
  document.write ('Internet Explorer version 4 eller ældre');
} else if (IE5_plus) {
  document.write ('Internet Explorer version 5 eller nyere');
} else if (NS4) { 
  document.write ('Netscape version 4'); 
} else if (DOM) { 
  document.write ('En anden browser med W3C DOM understøttelse end IE'); 
}

Det skriver flg. i din browser:

Nogle gange kan det være mere hensigtsmæssigt i stedet at tage udgangspunkt i de oplysninger som browserne selv meddeler i User Agent strengen. Det er de oplysninger der returneres som værdier for egenskaberne navigator.appName, navigator.appVersion og navigator.userAgent. Her er de vist for den aktuelle browser:

Og nu til selve UA-scriptet. Se:

http://developer.netscape.com/evangelism/tools/practical-browser-sniffing/

og:

http://developer.netscape.com/evangelism/docs/api/ua/

Det sidste link indeholder selve scriptet (ua.js) der bruges i det første. Det kan også ses i denne sides kildekode. Med dette script kan man lave et tjek på formen:

if (navigator.family=='ie4'&&navigator.version<5.5) {
  så et eller andet;
}

Og her er så ovenstående sides egen demonstration af scriptet:

BEMÆRK at hvis navigator.version viser et helt tal er det ikke fordi scriptet ignorerer evetuelle decimaler, men fordi decimalen er 0. Visningen af navigator.version bygger på javascriptmetoden parseFloat(). Denne returnerer et helt tal for et tal hvor 0 er eneste decimal. Hvis decimalen er andet end 0 vises det. Så altså hvis browserversionen er 5.0 vil navigator.version vise "5", men hvis den er 5.5 vil den vise "5.5".

Prøv selv:

var Str0 = "5.0";
var Str5 = "5.5";
document.write ('parseFloat() af Str0 viser: ' + parseFloat(Str0));
document.write ('parseFloat() af Str5 viser: ' + parseFloat(Str5));

- som ser sådan ud:

Lad os nu prøve scriptet til at skelne Internet Explorer version 5.5- fra version 5.5+. Dette skel (som selvfølgelig er mindre aktuelt hvis man bruger Netscape) er valgt fordi det f.eks. afgør hvorvidt en iframe er "windowed" (og dermed ikke kan ligge bag andre elementer der ikke er winowed) eller "windowless" (og dermed i stand til dette). Scriptet:

if (IE) {
  document.write('Browser versionen på denne maskine er ');
  if (navigator.version>=5.5) {
    document.write ('lig med eller større');
  } else if (navigator.version<5.5) {
    document.write ('mindre');
  }
  document.write (' end IE 5.5');
} else if (DOM) {
    document.write ('Dette er en '+navigator.family+' browser, version '+navigator.version);
}

skriver flg.:

Så nu kan vi også lave flg. browserbestemmelse:

var IE55down = (IE&&navigator.version<5.5)?true:false;
var IE55up = (IE&&navigator.version>=5.5)?true:false;
if (IE55down) {
  document.write ('Dette er Internet Explorer i en version lavere end 5.5');
} else if (IE55up) {
  document.write ('Dette er Internet Explorer version 5.5 eller højere');
} else if (DOM) {
  document.write ('Dette er ikke Internet Explorer, men en '+navigator.family+' browser');
}

- der skriver:

Dette forudsætter dog at hele ua scriptet er tilgængelig for siden. Men hvis det ikke drejer sig om andet end at skelne mellem IE 5.5- og IE 5.5+ behøver man slet ikke hele dette ret omstændelige script. Den indledende browserbestemmelse i starten kan bare udvides sådan (hvor "IE55down" betyder IE 5.5- og "IE55up" betyder IE 5.5+):

var i = 0;
var IE = (document.all)?true:false;
var IE4 = (document.all&&!document.getElementById)?true:false;
var IE5 = (document.all&&document.getElementById)?true:false;
if (IE) i = navigator.userAgent.indexOf('MSIE');
var IE55down = (IE&&parseFloat(navigator.userAgent.substr(i+5))<5.5)?true:false;
var IE55up = (IE&&parseFloat(navigator.userAgent.substr(i+5))>=5.5)?true:false;

 

Besøg også Henrik Gemals ultimative BrowserSpy – og få ting at vide om din egen browser du ikke anede.