如何检测浏览器的版本?

IT技术 javascript browser version browser-detection
2021-02-08 07:01:08

我一直在寻找可以让我检测访问网站的用户是否使用 Firefox 3 或 4 的代码。我找到的只是检测浏览器类型而不是版本的代码。

如何检测这样的浏览器版本?

6个回答

您可以查看浏览器所说的内容,并使用该信息记录或测试多个浏览器。

navigator.sayswho= (function(){
    var ua= navigator.userAgent;
    var tem; 
    var M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
    if(/trident/i.test(M[1])){
        tem=  /\brv[ :]+(\d+)/g.exec(ua) || [];
        return 'IE '+(tem[1] || '');
    }
    if(M[1]=== 'Chrome'){
        tem= ua.match(/\b(OPR|Edge)\/(\d+)/);
        if(tem!= null) return tem.slice(1).join(' ').replace('OPR', 'Opera');
    }
    M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
    if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);
    return M.join(' ');
})();

console.log(navigator.sayswho); // outputs: `Chrome 62`

还没有考虑Edge: tem = ua.match(/\b(OPR|Edge)\/(\d+)/i); if (tem != null) return {name : tem[1] === 'OPR' ? 'Opera' : tem[1], version : tem[2]};
2021-03-23 07:01:08
此脚本错误地报告了内部 Facebook 浏览器的浏览器 Chrome 4.0 版(当您在 Android 上的 Facebook 应用程序中单击 Web 链接时启动)。用户代理字符串看起来像:Mozilla/5.0 (Linux; Android 5.0; Nexus 9 Build/LRX21R; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/45.0.2454.95 Safari/537.36 [FB_IAB/FB4A;FBAV/50.0.0.10.54;]不幸的是,这是一个非常突出的用户代理,所以不能真正忽略它......
2021-03-26 07:01:08
刚刚发现将浏览器 IE11 降级到 IE10 导航用户代理显示 Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.1;WOW64;Trident/6.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.307)的严重问题CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) 从字符串它的 IE7 with trident/6.0 小心
2021-04-02 07:01:08
如果此答案包含输出示例,将会有所帮助。我不知道该函数期望什么字符串。
2021-04-03 07:01:08
有一些库可以做到这一点,即 bowser,并且作为一般规则,如果您不需要,您不应该重新发明轮子。
2021-04-07 07:01:08

这是对 Kennebec 答案的改进。

function get_browser() {
    var ua=navigator.userAgent,tem,M=ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []; 
    if(/trident/i.test(M[1])){
        tem=/\brv[ :]+(\d+)/g.exec(ua) || []; 
        return {name:'IE',version:(tem[1]||'')};
        }   
    if(M[1]==='Chrome'){
        tem=ua.match(/\bOPR|Edge\/(\d+)/)
        if(tem!=null)   {return {name:'Opera', version:tem[1]};}
        }   
    M=M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
    if((tem=ua.match(/version\/(\d+)/i))!=null) {M.splice(1,1,tem[1]);}
    return {
      name: M[0],
      version: M[1]
    };
 }

var browser=get_browser(); // browser.name = 'Chrome'
                           // browser.version = '40'

console.log(browser);

通过这种方式,您可以避免代码的晦涩。

(某些平台 - 例如 os x - 将为 navigator.userAgent 提供不同的输出,并且您无法通过“Opera”字符串识别 Opera 浏览器,而是使用“OPR”)。
2021-03-15 07:01:08
get_browser 和 get_browser_version 在“if trident”和“if chrome”条件语句中返回不正确的详细信息 if tem!=null
2021-03-16 07:01:08

以下是截至 2019 年 5 月处理浏览器检测的几个著名库。

Bowser by lancedikson - 3,761★s - 最后更新于 2019 年 5 月 26 日 - 4.8KB

var result = bowser.getParser(window.navigator.userAgent);
console.log(result);
document.write("You are using " + result.parsedResult.browser.name +
               " v" + result.parsedResult.browser.version + 
               " on " + result.parsedResult.os.name);
<script src="https://unpkg.com/bowser@2.4.0/es5.js"></script>

*支持基于 Chromium 的 Edge


平台.js by bestiejs - 2,250★s - 最后更新于 2018 年 10 月 30 日 - 5.9KB

console.log(platform);
document.write("You are using " + platform.name +
               " v" + platform.version + 
               " on " + platform.os);
<script src="https://cdnjs.cloudflare.com/ajax/libs/platform/1.3.5/platform.min.js"></script>

gabceb 的jQuery 浏览器- 504★s - 最后更新于 2015 年 11 月 23 日 - 1.3KB

console.log($.browser)
document.write("You are using " + $.browser.name +
               " v" + $.browser.versionNumber + 
               " on " + $.browser.platform);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-browser/0.1.0/jquery.browser.min.js"></script>

Detect.js (Archived) by darcyclarke - 522★s - 最后更新于 2015 年 10 月 26 日 - 2.9KB

var result = detect.parse(navigator.userAgent);
console.log(result);
document.write("You are using " + result.browser.family +
               " v" + result.browser.version + 
               " on " + result.os.family);
<script src="https://cdnjs.cloudflare.com/ajax/libs/Detect.js/2.2.2/detect.min.js"></script>

浏览器检测(存档)由 QuirksMode - 最后更新于 2013 年 11 月 14 日 - 884B

console.log(BrowserDetect)
document.write("You are using " + BrowserDetect.browser +
               " v" + BrowserDetect.version + 
               " on " + BrowserDetect.OS);
<script src="https://kylemit.github.io/libraries/libraries/BrowserDetect.js"></script>


值得注意的提及:

  • 哪个浏览器- 1,355★s - 最后更新于 2018 年 10 月 2 日
  • Modernizr - 23,397★s - 最后更新于 2019 年 1 月 12 日 - 为了喂饱喂饱的马,特征检测应该驱动任何canIuse风格的问题。浏览器检测实际上只是为各个浏览器提供自定义图像、下载文件或说明。

进一步阅读

这结合了 kennebec (K) 的回答和 Hermann Ingjaldsson 的 (H) 回答:

  • 保持原始答案的最小代码。(K)
  • 适用于 Microsoft Edge (K)
  • 扩展导航器对象而不是创建新的变量/对象。(K)
  • 将浏览器版本和名称分成独立的子对象。(H)

 

navigator.browserSpecs = (function(){
    var ua = navigator.userAgent, tem, 
        M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
    if(/trident/i.test(M[1])){
        tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
        return {name:'IE',version:(tem[1] || '')};
    }
    if(M[1]=== 'Chrome'){
        tem = ua.match(/\b(OPR|Edge)\/(\d+)/);
        if(tem != null) return {name:tem[1].replace('OPR', 'Opera'),version:tem[2]};
    }
    M = M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
    if((tem = ua.match(/version\/(\d+)/i))!= null)
        M.splice(1, 1, tem[1]);
    return {name:M[0], version:M[1]};
})();

console.log(navigator.browserSpecs); //Object { name: "Firefox", version: "42" }

if (navigator.browserSpecs.name == 'Firefox') {
    // Do something for Firefox.
    if (navigator.browserSpecs.version > 42) {
        // Do something for Firefox versions greater than 42.
    }
}
else {
    // Do something for all other browsers.
}

库巴JavaScript库提供了这个功能。

if (bowser.msie && bowser.version <= 6) {
  alert('Hello China');
}

它似乎维护得很好。