2016-01-14 6 views
2

Я работаю над правильным поиском версии браузера клиента в приведенном ниже коде. Все работает, но номер версии IE11. Я продолжаю получать значение 5. Браузер корректно отображает всю версию, которую я тестировал, но IE11. Я пробовал несколько вещей, но я в тупике. Может ли кто-нибудь помочь мне с тем, что мне не хватает, спасибо.Javascript Detectioning IE11 Version

// BrowserInformation 
    vm.objappVersion = navigator.appVersion; 
    vm.objAgent = navigator.userAgent; 
    vm.objbrowserName = navigator.appName; 
    vm.objfullVersion = ''+parseFloat(navigator.appVersion); 
    vm.objBrMajorVersion = parseInt(navigator.appVersion,10); 
    vm.objOffsetName = ''; 
    vm.objOffsetVersion = ''; 
    vm.ix; 
    // In Chrome 
    if ((vm.objOffsetVersion = vm.objAgent.indexOf("Chrome")) != -1) { 
     vm.objbrowserName = "Chrome"; vm.objfullVersion = vm.objAgent.substring(vm.objOffsetVersion + 7); 
    } 
     // In IE11 
    else if ((vm.objOffsetVersion = vm.objAgent.indexOf("rv")) != -1) { 
     vm.objbrowserName = "Microsoft Internet Explorer Version 11"; vm.objfullVersion = vm.objAgent.substring(vm.objOffsetVersion + 10); 
    } 
     // In Microsoft internet explorer all other versions 
    else if ((vm.objOffsetVersion = vm.objAgent.indexOf("MSIE")) != -1) { 
     vm.objbrowserName = "Microsoft Internet Explorer"; vm.objfullVersion = vm.objAgent.substring(vm.objOffsetVersion + 5); 
    } 
     // In Firefox 
    else if ((vm.objOffsetVersion = vm.objAgent.indexOf("Firefox")) != -1) { 
     vm.objbrowserName = "Firefox"; 
    } 
     // In Safari 
    else if ((vm.objOffsetVersion = vm.objAgent.indexOf("Safari")) != -1) { 
     vm.objbrowserName = "Safari"; vm.objfullVersion = vm.objAgent.substring(vm.objOffsetVersion + 7); 
     if ((vm.objOffsetVersion = vm.objAgent.indexOf("Version")) != -1) vm.objfullVersion = vm.objAgent.substring(vm.objOffsetVersion + 8); 
    } 
     // For other browser "name/version" is at the end of userAgent 
    else if ((vm.objOffsetName = vm.objAgent.lastIndexOf(' ') + 1) < (vm.objOffsetVersion = vm.objAgent.lastIndexOf('/'))) { 
     vm.objbrowserName = vm.objAgent.substring(vm.objOffsetName, vm.objOffsetVersion); vm.objfullVersion = vm.objAgent.substring(vm.objOffsetVersion + 1); 
     if (vm.objbrowserName.toLowerCase() == vm.objbrowserName.toUpperCase()) { vm.objbrowserName = navigator.appName; } 
    } 
    // trimming the fullVersion string at semicolon/space if present 
    if ((vm.ix = vm.objfullVersion.indexOf(";")) != -1) 
     vm.objfullVersion = vm.objfullVersion.substring(0, vm.ix); 
    if ((vm.ix = vm.objfullVersion.indexOf(" ")) != -1) 
     vm.objfullVersion = vm.objfullVersion.substring(0, vm.ix); 
     vm.objBrMajorVersion = parseInt('' + vm.objfullVersion, 10); 
    if (isNaN(vm.objBrMajorVersion)) { 
     vm.objfullVersion = '' + parseFloat(navigator.appVersion); 
     vm.objBrMajorVersion = parseInt(navigator.appVersion, 10); 
    } 
+2

Могу ли я спросить, почему вы обнюхиваете версии браузера? Кроме того, какова ценность 'navigator.userAgent' в IE 11 для вас? – Sampson

+0

@Sampson Номер версии будет предоставлен по соображениям безопасности. navigator.userAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3; GWX: RESERVED; TNJB; rv: 11.0), как Gecko " – TimorDomini

+0

Возможно, если' .indexOf ("rv") 'больше, чем' -1', вы должны 'ua.match (/ rv: (\ d +) /) 'и захватить значение в индексе 1 результирующего массива? – Sampson

ответ

1

Вот обновление скрипта, который работает

vm.objappVersion = navigator.appVersion; 
vm.objAgent = navigator.userAgent; 
vm.objbrowserName = navigator.appName; 
vm.objfullVersion = ''+parseFloat(navigator.appVersion); 
vm.objBrMajorVersion = parseInt(navigator.appVersion,10); 
vm.objOffsetName = ''; 
vm.objOffsetVersion = ''; 
vm.ix; 
// In Chrome 
if ((vm.objOffsetVersion = vm.objAgent.indexOf("Chrome")) != -1) { 
    vm.objbrowserName = "Chrome"; vm.objfullVersion = vm.objAgent.substring(vm.objOffsetVersion + 7); 
} 
    // In IE11 
else if ((vm.objOffsetVersion = vm.objAgent.indexOf("rv")) != -1) { 
    vm.objbrowserName = "Microsoft Internet Explorer Version 11"; vm.objfullVersion = vm.objAgent.substring(vm.objOffsetVersion + 2);   
} 
    // In Microsoft internet explorer all other versions 
else if ((vm.objOffsetVersion = vm.objAgent.indexOf("MSIE")) != -1) { 
    vm.objbrowserName = "Microsoft Internet Explorer"; vm.objfullVersion = vm.objAgent.substring(vm.objOffsetVersion + 5); 
} 
    // In Firefox 
else if ((vm.objOffsetVersion = vm.objAgent.indexOf("Firefox")) != -1) { 
    vm.objbrowserName = "Firefox"; 
} 
    // In Safari 
else if ((vm.objOffsetVersion = vm.objAgent.indexOf("Safari")) != -1) { 
    vm.objbrowserName = "Safari"; vm.objfullVersion = vm.objAgent.substring(vm.objOffsetVersion + 7); 
    if ((vm.objOffsetVersion = vm.objAgent.indexOf("Version")) != -1) vm.objfullVersion = vm.objAgent.substring(vm.objOffsetVersion + 8); 
} 
    // For other browser "name/version" is at the end of userAgent 
else if ((vm.objOffsetName = vm.objAgent.lastIndexOf(' ') + 1) < (vm.objOffsetVersion = vm.objAgent.lastIndexOf('/'))) { 
    vm.objbrowserName = vm.objAgent.substring(vm.objOffsetName, vm.objOffsetVersion); vm.objfullVersion = vm.objAgent.substring(vm.objOffsetVersion + 1); 
    if (vm.objbrowserName.toLowerCase() == vm.objbrowserName.toUpperCase()) { vm.objbrowserName = navigator.appName; } 
} 

// trimming the fullVersion string at semicolon/space if present 
if ((vm.ix = vm.objfullVersion.indexOf(";")) != -1) { 
    vm.objfullVersion = vm.objfullVersion.substring(0, vm.ix); 
} 
if ((vm.ix = vm.objfullVersion.indexOf(":")) != -1) { 
    vm.ix = vm.objfullVersion.indexOf(")"); 
    vm.objfullVersion = vm.objfullVersion.substring(1, vm.ix); 
    vm.objBrMajorVersion = parseInt('' + vm.objfullVersion, 10); 
} 
if ((vm.ix = vm.objfullVersion.indexOf(" ")) != -1) { 
    vm.objfullVersion = vm.objfullVersion.substring(0, vm.ix); 
    vm.objBrMajorVersion = parseInt('' + vm.objfullVersion, 10); 
} 
if (isNaN(vm.objBrMajorVersion)) { 
    vm.objfullVersion = '' + parseFloat(navigator.appVersion); 
    vm.objBrMajorVersion = parseInt(navigator.appVersion, 10); 
} 

Изменена следующая строка:

vm.objbrowserName = "Microsoft Internet Explorer Version 11"; vm.objfullVersion = vm.objAgent.substring(vm.objOffsetVersion + 2); 

И добавил эти строки

if ((vm.ix = vm.objfullVersion.indexOf(":")) != -1) { 
    vm.ix = vm.objfullVersion.indexOf(")"); 
    vm.objfullVersion = vm.objfullVersion.substring(1, vm.ix); 
    vm.objBrMajorVersion = parseInt('' + vm.objfullVersion, 10); 
} 

Боковое примечание: Я рекомендую, однако, быть осторожным, обнюхивать/обнаруживать подобное, поскольку это может легко ошибиться.

+0

Это для частного облачного приложения, но информация будет использоваться для случая, когда нам нужно устранить проблему. На данный момент мы не поддерживаем некоторые старые версии браузеров в настоящее время. Это поможет клиенту предоставить нам правильную версию. Я также попробовал ваше предложение и все тот же результат. – TimorDomini

+0

@Adam Что такое 'vm.objfullVersion' значение/строка для IE11? – LGSon

+0

@Adam И какое значение имеет 'vm.objAgent' для IE11? – LGSon

Смежные вопросы