Fico triste em dizer: estamos sem sorte neste caso.
Eu gostaria de encaminhá-lo ao autor de WhichBrowser : Everybody lies .
Basicamente, nenhum navegador está sendo honesto. Não importa se você usa Chrome ou IE, ambos dirão que são "Mozilla Netscape" com suporte para Gecko e Safari. Experimente você mesmo em qualquer um dos violinos que voam por aí neste tópico:
violino de hims056
Violino de Hariharan
ou qualquer outro ... Experimente com o Chrome (que ainda pode dar certo), depois experimente com uma versão recente do IE e você vai chorar. Claro, existem heurísticas, para fazer tudo certo, mas será tedioso entender todos os casos extremos, e muito provavelmente não funcionarão mais daqui a um ano.
Pegue seu código, por exemplo:
<div id="example"></div>
<script type="text/javascript">
txt = "<p>Browser CodeName: " + navigator.appCodeName + "</p>";
txt+= "<p>Browser Name: " + navigator.appName + "</p>";
txt+= "<p>Browser Version: " + navigator.appVersion + "</p>";
txt+= "<p>Cookies Enabled: " + navigator.cookieEnabled + "</p>";
txt+= "<p>Platform: " + navigator.platform + "</p>";
txt+= "<p>User-agent header: " + navigator.userAgent + "</p>";
document.getElementById("example").innerHTML=txt;
</script>
Chrome diz:
Nome do código do navegador: Mozilla
Nome do navegador: Netscape
Versão do navegador: 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 40.0.2214.115 Safari / 537.36
Cookies ativados: verdadeiro
Plataforma: Win32
Cabeçalho do agente do usuário: Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 40.0.2214.115 Safari / 537.36
IE diz:
Nome do código do navegador: Mozilla
Nome do navegador: Netscape
Versão do navegador: 5.0 (Windows NT 6.1; WOW64; Trident / 7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4 .0E; InfoPath.3; rv: 11.0) como o Gecko
Cookies ativados: verdadeiro
Plataforma: Win32
Cabeçalho do agente do usuário: Mozilla / 5.0 (Windows NT 6.1; WOW64; Trident / 7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4. 0C; .NET4.0E; InfoPath.3; rv: 11.0) como o Gecko
Pelo menos o Chrome ainda tem uma string que contém "Chrome" com o número exato da versão. Mas, para o IE, você deve extrapolar a partir das coisas que ele suporta para realmente descobrir (quem mais se gabaria de oferecer suporte .NET
ou Media Center
: P) e, em seguida, compará-lo com o rv:
no final para obter o número da versão. Claro, mesmo essas heurísticas sofisticadas podem muito provavelmente falhar assim que o IE 12 (ou como quiserem chamá-lo) for lançado.