Z przykrością muszę powiedzieć: w tym przypadku nie mamy szczęścia.
Chciałbym skierować Cię do autora WhichBrowser : Everybody lying .
Zasadniczo żadna przeglądarka nie jest uczciwa. Bez względu na to, czy używasz przeglądarki Chrome czy IE, oba powiedzą Ci, że to „Mozilla Netscape” z obsługą Gecko i Safari. Wypróbuj sam na dowolnym skrzypcach latających w tym wątku:
skrzypce hims056
Skrzypce Hariharana
lub jakikolwiek inny ... Wypróbuj go z Chrome (który nadal może się powieść), a następnie wypróbuj z najnowszą wersją IE, a będziesz płakać. Oczywiście, istnieją heurystyki, aby wszystko było dobrze, ale zrozumienie wszystkich skrajnych przypadków będzie żmudne i najprawdopodobniej nie będą już działać za rok.
Weź swój kod, na przykład:
<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 mówi:
Nazwa kodu przeglądarki: Mozilla
Nazwa przeglądarki: Netscape
Wersja przeglądarki: 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, jak Gecko) Chrome / 40.0.2214.115 Safari / 537.36
Cookies włączone: prawda
Platforma: Win32
Nagłówek agenta użytkownika: Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, jak Gecko) Chrome / 40.0.2214.115 Safari / 537.36
IE mówi:
Nazwa kodu przeglądarki: Mozilla
Nazwa przeglądarki: Netscape
Wersja przeglądarki: 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) jak Gecko
Cookies włączone: prawda
Platforma: Win32
Nagłówek agenta użytkownika: 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) jak Gecko
Przynajmniej Chrome nadal ma ciąg zawierający słowo „Chrome” z dokładnym numerem wersji. Ale w przypadku IE musisz ekstrapolować z rzeczy, które obsługuje, aby faktycznie to rozgryźć (kto inny by się pochwalił, że obsługuje .NET
lub Media Center
: P), a następnie porównać to z rv:
na samym końcu, aby uzyskać numer wersji. Oczywiście nawet tak wyrafinowana heurystyka może z dużym prawdopodobieństwem zawieść, gdy tylko pojawi się IE 12 (lub jakkolwiek chcą to nazwać).