【问题标题】:Javascript Detecting IE11 Version [duplicate]Javascript检测IE11版本[重复]
【发布时间】:2016-04-20 05:32:58
【问题描述】:

我正在努力在下面的代码中正确查找客户端浏览器版本。一切正常,但 IE11 版本号。我一直得到 5 的值。浏览器正确显示了我测试的所有版本,但 IE11 除外。我已经尝试了几件事,但我很难过。任何人都可以帮助我解决我所缺少的,谢谢。

// 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);
    }

【问题讨论】:

  • 请问[为什么]你在嗅探浏览器版本?另外,IE 11 中的navigator.userAgent 对你来说有什么价值?
  • @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"
  • 也许,如果.indexOf("rv") 大于-1,你应该ua.match(/rv:(\d+)/) 并获取结果数组索引1 处的值?

标签: javascript


【解决方案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);
}

旁注: 不过,我确实建议小心嗅探/检测,因为它很容易出错。

【讨论】:

  • 这适用于基于私有云的应用程序,但信息将用于我们需要解决问题的情况。截至目前,我们暂时不支持某些旧版本的浏览器。这将帮助客户为我们提供正确的版本。我也试过你的建议,结果还是一样。
  • @Adam IE11 的 vm.objfullVersion 值/字符串是什么?
  • @Adam vm.objAgent 对于 IE11 有什么价值?
  • vm.objfullVersion = 5 vm.objAgent = "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"
  • 目前我只是手动将其设置为 11。我还有其他需要处理的项目。我会回来试试的。我要感谢大家的帮助。如果我找到修复程序,我会确保发布它。
猜你喜欢
  • 2014-02-07
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
相关资源
最近更新 更多