К сожалению, нам не повезло с этим.
Я хотел бы направить вас к автору WhichBrowser : Все лгут .
По сути, ни один браузер не честен. Независимо от того, используете ли вы Chrome или IE, они оба скажут вам, что они «Mozilla Netscape» с поддержкой Gecko и Safari. Попробуйте сами на любой из скрипок, летающих в этой теме:
скрипка hims056
Скрипка Харихарана
или любой другой ... Попробуйте это с Chrome (который все еще может быть успешным), затем попробуйте с последней версией IE, и вы заплачете. Конечно, есть эвристики, чтобы все исправить, но будет утомительно разбираться во всех крайних случаях, и они, скорее всего, больше не будут работать через год.
Возьмите ваш код, например:
<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 говорит:
Кодовое имя браузера: Mozilla
Имя браузера: Netscape
Версия браузера: 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 40.0.2214.115 Safari / 537.36
Файлы cookie включены: true
Платформа: Win32
Заголовок пользовательского агента: Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 40.0.2214.115 Safari / 537.36
IE говорит:
Кодовое имя браузера: Mozilla
Имя браузера: Netscape
Версия браузера: 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) как Gecko
Файлы cookie включены: true
Платформа: Win32
Заголовок пользовательского агента: 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) как Gecko
По крайней мере, в Chrome все еще есть строка, содержащая «Chrome» с точным номером версии. Но для IE вы должны экстраполировать то, что он поддерживает, чтобы действительно понять это (кто еще может похвастаться тем, что они поддерживают .NET
или Media Center
: P), а затем сопоставить его с rv:
в самом конце, чтобы получить номер версии. Конечно, даже такая сложная эвристика может дать сбой, как только выйдет IE 12 (или как там его называют).