Como você pode detectar a versão de um navegador?

Eu tenho procurado em torno de código que me permite detectar se o usuário que visita o site tem o Firefox 3 ou 4. Tudo que eu encontrei é o código para detectar o tipo de navegador, mas não a versão.

Como posso detectar a versão de um navegador assim?

    Você pode ver o que o navegador diz e usar essas informações para registrar ou testar vários navegadores.

    navigator.sayswho= (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 '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` 

    Isso é uma melhoria na resposta da 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] }; } 

    E então você acabou de correr:

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

    Dessa forma, você pode se proteger da obscuridade do código.

    Isto combina a resposta do kennebec (K) com a resposta de Hermann Ingjaldsson (H):

    • Mantém o código mínimo da resposta original. (K)
    • Funciona com o Microsoft Edge (K)
    • Estende o object do navegador em vez de criar uma nova variável / object. (K)
    • Separa a versão e o nome do navegador em objects-filhos independentes. (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. } 

    Use isto: http://www.quirksmode.org/js/detect.html

     alert(BrowserDetect.browser); // will say "Firefox" alert(BrowserDetect.version); // will say "3" or "4" 

    A biblioteca JavaScript do bowser oferece essa funcionalidade.

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

    Parece estar bem conservado.

    Eu estava procurando uma solução para mim, já que o jQuery 1.9.1 e acima removeram a funcionalidade $.browser . Eu criei essa pequena function que funciona para mim. Ele precisa de uma variável global (chamei meu _browser) para verificar qual navegador é. Eu escrevi um jsfiddle para ilustrar como ele pode ser usado, claro que ele pode ser expandido para outros navegadores apenas adicionando um teste para _browser.foo, onde foo é o nome do navegador. Eu fiz apenas os mais populares.

    detectBrowser ()

     _browser = {}; function detectBrowser() { var uagent = navigator.userAgent.toLowerCase(), match = ''; _browser.chrome = /webkit/.test(uagent) && /chrome/.test(uagent) && !/edge/.test(uagent); _browser.firefox = /mozilla/.test(uagent) && /firefox/.test(uagent); _browser.msie = /msie/.test(uagent) || /trident/.test(uagent) || /edge/.test(uagent); _browser.safari = /safari/.test(uagent) && /applewebkit/.test(uagent) && !/chrome/.test(uagent); _browser.opr = /mozilla/.test(uagent) && /applewebkit/.test(uagent) && /chrome/.test(uagent) && /safari/.test(uagent) && /opr/.test(uagent); _browser.version = ''; for (x in _browser) { if (_browser[x]) { match = uagent.match( new RegExp("(" + (x === "msie" ? "msie|edge" : x) + ")( |\/)([0-9]+)") ); if (match) { _browser.version = match[3]; } else { match = uagent.match(new RegExp("rv:([0-9]+)")); _browser.version = match ? match[1] : ""; } break; } } _browser.opera = _browser.opr; delete _browser.opr; } 

    Para verificar se o navegador atual é o Opera, você faria

     if (_browser.opera) { // Opera specific code } 

    Editar Corrigida a formatação, corrigida a detecção para o IE11 e o Opera / Chrome, alterado para browserResult do resultado. Agora a ordem das chaves _browser não importa. Link jsFiddle atualizado.

    2015/08/11 Editar Adicionado novo testcase para o Internet Explorer 12 (EDGE), corrigido um pequeno problema de expressão regular. Link jsFiddle atualizado.

    jQuery pode lidar com isso muito bom ( jQuery.browser )

     var ua = $.browser; if ( ua.mozilla && ua.version.slice(0,3) == "1.9" ) { alert( "Do stuff for firefox 3" ); } 

    EDIT: Como Joshua escreveu em seu comentário abaixo, a propriedade jQuery.browser não é mais suportada no jQuery desde a versão 1.9 (leia as notas de lançamento do jQuery 1.9 para obter mais detalhes). A equipe de desenvolvimento do jQuery recomenda o uso de uma abordagem mais completa, como a adaptação da interface do usuário com a biblioteca Modernizr .

     function BrowserCheck() { var N= navigator.appName, ua= navigator.userAgent, tem; var M= ua.match(/(opera|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i); if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) {M[2]=tem[1];} M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?']; return M; } 

    Isso retornará uma matriz, o primeiro elemento é o nome do navegador, o segundo elemento é o número completo da versão em formato de string.

    Em Javascript puro, você pode fazer uma correspondência RegExp no navigator.userAgent para encontrar a versão do Firefox:

     var uMatch = navigator.userAgent.match(/Firefox\/(.*)$/), ffVersion; if (uMatch && uMatch.length > 1) { ffVersion = uMatch[1]; } 

    ffVersion será undefined se não for um navegador Firefox.

    Veja o exemplo de trabalho →

    Aqui estão várias bibliotecas proeminentes que lidam com a detecção de navegador.

    Bowser por lancedikson – 2,713 ★ s – Última atualização em 2 de agosto de 2018 – 2.6KB

     console.log(bowser); document.write("You are using " + bowser.name + " v" + bowser.version + " on " + bowser.osname); 
      

    Olhe para navigator.userAgentFirefox/xxx.xxx.xxx é especificado no final.

     var nVer = navigator.appVersion; var nAgt = navigator.userAgent; var browserName = navigator.appName; var fullVersion = ''+parseFloat(navigator.appVersion); var majorVersion = parseInt(navigator.appVersion,10); var nameOffset,verOffset,ix; // In Opera, the true version is after "Opera" or after "Version" if ((verOffset=nAgt.indexOf("Opera"))!=-1) { browserName = "Opera"; fullVersion = nAgt.substring(verOffset+6); if ((verOffset=nAgt.indexOf("Version"))!=-1) fullVersion = nAgt.substring(verOffset+8); } // In MSIE, the true version is after "MSIE" in userAgent else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) { browserName = "Microsoft Internet Explorer"; fullVersion = nAgt.substring(verOffset+5); } // In Chrome, the true version is after "Chrome" else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) { browserName = "Chrome"; fullVersion = nAgt.substring(verOffset+7); } // In Safari, the true version is after "Safari" or after "Version" else if ((verOffset=nAgt.indexOf("Safari"))!=-1) { browserName = "Safari"; fullVersion = nAgt.substring(verOffset+7); if ((verOffset=nAgt.indexOf("Version"))!=-1) fullVersion = nAgt.substring(verOffset+8); } // In Firefox, the true version is after "Firefox" else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) { browserName = "Firefox"; fullVersion = nAgt.substring(verOffset+8); } // In most other browsers, "name/version" is at the end of userAgent else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) { browserName = nAgt.substring(nameOffset,verOffset); fullVersion = nAgt.substring(verOffset+1); if (browserName.toLowerCase()==browserName.toUpperCase()) { browserName = navigator.appName; } } // trim the fullVersion string at semicolon/space if present if ((ix=fullVersion.indexOf(";"))!=-1) fullVersion=fullVersion.substring(0,ix); if ((ix=fullVersion.indexOf(" "))!=-1) fullVersion=fullVersion.substring(0,ix); majorVersion = parseInt(''+fullVersion,10); if (isNaN(majorVersion)) { fullVersion = ''+parseFloat(navigator.appVersion); majorVersion = parseInt(navigator.appVersion,10); } document.write('' +'Browser name = '+browserName+'
    ' +'Full version = '+fullVersion+'
    ' +'Major version = '+majorVersion+'
    ' +'navigator.appName = '+navigator.appName+'
    ' +'navigator.userAgent = '+navigator.userAgent+'
    ' )

    Veja a demonstração aqui .. http://jsfiddle.net/hw4jM/3/

    Eu escrevi um detector de versão baseado na resposta de Hermann Ingjaldsson, mas mais robusto e que retorna um object com dados de nome / versão nele. Ele cobre os principais navegadores, mas não me preocupo com a infinidade de dispositivos móveis e menores:

     function getBrowserData(nav) { var data = {}; var ua = data.uaString = nav.userAgent; var browserMatch = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*([\d\.]+)/i) || []; if (browserMatch[1]) { browserMatch[1] = browserMatch[1].toLowerCase(); } var operaMatch = browserMatch[1] === 'chrome'; if (operaMatch) { operaMatch = ua.match(/\bOPR\/([\d\.]+)/); } if (/trident/i.test(browserMatch[1])) { var msieMatch = /\brv[ :]+([\d\.]+)/g.exec(ua) || []; data.name = 'msie'; data.version = msieMatch[1]; } else if (operaMatch) { data.name = 'opera'; data.version = operaMatch[1]; } else if (browserMatch[1] === 'safari') { var safariVersionMatch = ua.match(/version\/([\d\.]+)/i); data.name = 'safari'; data.version = safariVersionMatch[1]; } else { data.name = browserMatch[1]; data.version = browserMatch[2]; } var versionParts = []; if (data.version) { var versionPartsMatch = data.version.match(/(\d+)/g) || []; for (var i=0; i < versionPartsMatch.length; i++) { versionParts.push(versionPartsMatch[i]); } if (versionParts.length > 0) { data.majorVersion = versionParts[0]; } } data.name = data.name || '(unknown browser name)'; data.version = { full: data.version || '(unknown full browser version)', parts: versionParts, major: versionParts.length > 0 ? versionParts[0] : '(unknown major browser version)' }; return data; }; 

    Pode então ser usado assim:

     var brData = getBrowserData(window.navigator || navigator); console.log('name: ' + brData.name); console.log('major version: ' + brData.version.major); // etc. 
      

    Eu fiz um script em código ASP para detectar o navegador, versão do navegador, OS e versão do sistema operacional. A razão para eu fazer isso em ASP foi porque eu quero armazenar os dados em um database de log. Então eu tive que detectar o servidor do navegador.

    Aqui está o código:

     on error resume next ua = lcase(Request.ServerVariables("HTTP_USER_AGENT")) moz = instr(ua,"mozilla") ffx = instr(ua,"firefox") saf = instr(ua,"safari") crm = instr(ua,"chrome") max = instr(ua,"maxthon") opr = instr(ua,"opera") ie4 = instr(ua,"msie 4") ie5 = instr(ua,"msie 5") ie6 = instr(ua,"msie 6") ie7 = instr(ua,"msie 7") ie8 = instr(ua,"trident/4.0") ie9 = instr(ua,"trident/5.0") if moz>0 then BrowserType = "Mozilla" BrVer = mid(ua,moz+8,(instr(moz,ua," ")-(moz+8))) end if if ffx>0 then BrowserType = "FireFox" BrVer = mid(ua,ffx+8) end if if saf>0 then BrowserType = "Safari" BrVerPlass = instr(ua,"version") BrVer = mid(ua,BrVerPlass+8,(instr(BrVerPlass,ua," ")-(BrVerPlass+8))) end if if crm>0 then BrowserType = "Chrome" BrVer = mid(ua,crm+7,(instr(crm,ua," ")-(crm+7))) end if if max>0 then BrowserType = "Maxthon" BrVer = mid(ua,max+8,(instr(max,ua," ")-(max+8))) end if if opr>0 then BrowserType = "Opera" BrVerPlass = instr(ua,"presto") BrVer = mid(ua,BrVerPlass+7,(instr(BrVerPlass,ua," ")-(BrVerPlass+7))) end if if ie4>0 then BrowserType = "Internet Explorer" BrVer = "4" end if if ie5>0 then BrowserType = "Internet Explorer" BrVer = "5" end if if ie6>0 then BrowserType = "Internet Explorer" BrVer = "6" end if if ie7>0 then BrowserType = "Internet Explorer" BrVer = "7" end if if ie8>0 then BrowserType = "Internet Explorer" BrVer = "8" if ie7>0 then BrVer = BrVer & " (in IE7 compability mode)" end if if ie9>0 then BrowserType = "Internet Explorer" BrVer = "9" if ie7>0 then BrVer = BrVer & " (in IE7 compability mode)" if ie8>0 then BrVer = BrVer & " (in IE8 compability mode)" end if OSSel = mid(ua,instr(ua,"(")+1,(instr(ua,";")-instr(ua,"("))-1) OSver = mid(ua,instr(ua,";")+1,(instr(ua,")")-instr(ua,";"))-1) if BrowserType = "Internet Explorer" then OSStart = instr(ua,";") OSStart = instr(OSStart+1,ua,";") OSStopp = instr(OSStart+1,ua,";") OSsel = mid(ua,OSStart+2,(OSStopp-OSStart)-2) end if Select case OSsel case "windows nt 6.1" OS = "Windows" OSver = "7" case "windows nt 6.0" OS = "Windows" OSver = "Vista" case "windows nt 5.2" OS = "Windows" OSver = "Srv 2003 / XP x64" case "windows nt 5.1" OS = "Windows" OSver = "XP" case else OS = OSSel End select Response.write "
    " & ua & "
    " & BrowserType & "
    " & BrVer & "
    " & OS & "
    " & OSver & "
    " 'Use the variables here for whatever you need........

    Esta página parece ter um trecho bem legal que usa apenas a propriedade appString e appVersion como último recurso, pois afirma que não é confiável em certos navegadores. O código na página é o seguinte:

     var nVer = navigator.appVersion; var nAgt = navigator.userAgent; var browserName = navigator.appName; var fullVersion = ''+parseFloat(navigator.appVersion); var majorVersion = parseInt(navigator.appVersion,10); var nameOffset,verOffset,ix; // In Opera 15+, the true version is after "OPR/" if ((verOffset=nAgt.indexOf("OPR/"))!=-1) { browserName = "Opera"; fullVersion = nAgt.substring(verOffset+4); } // In older Opera, the true version is after "Opera" or after "Version" else if ((verOffset=nAgt.indexOf("Opera"))!=-1) { browserName = "Opera"; fullVersion = nAgt.substring(verOffset+6); if ((verOffset=nAgt.indexOf("Version"))!=-1) fullVersion = nAgt.substring(verOffset+8); } // In MSIE, the true version is after "MSIE" in userAgent else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) { browserName = "Microsoft Internet Explorer"; fullVersion = nAgt.substring(verOffset+5); } // In Chrome, the true version is after "Chrome" else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) { browserName = "Chrome"; fullVersion = nAgt.substring(verOffset+7); } // In Safari, the true version is after "Safari" or after "Version" else if ((verOffset=nAgt.indexOf("Safari"))!=-1) { browserName = "Safari"; fullVersion = nAgt.substring(verOffset+7); if ((verOffset=nAgt.indexOf("Version"))!=-1) fullVersion = nAgt.substring(verOffset+8); } // In Firefox, the true version is after "Firefox" else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) { browserName = "Firefox"; fullVersion = nAgt.substring(verOffset+8); } // In most other browsers, "name/version" is at the end of userAgent else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) { browserName = nAgt.substring(nameOffset,verOffset); fullVersion = nAgt.substring(verOffset+1); if (browserName.toLowerCase()==browserName.toUpperCase()) { browserName = navigator.appName; } } // trim the fullVersion string at semicolon/space if present if ((ix=fullVersion.indexOf(";"))!=-1) fullVersion=fullVersion.substring(0,ix); if ((ix=fullVersion.indexOf(" "))!=-1) fullVersion=fullVersion.substring(0,ix); majorVersion = parseInt(''+fullVersion,10); if (isNaN(majorVersion)) { fullVersion = ''+parseFloat(navigator.appVersion); majorVersion = parseInt(navigator.appVersion,10); } document.write('' +'Browser name = '+browserName+'
    ' +'Full version = '+fullVersion+'
    ' +'Major version = '+majorVersion+'
    ' +'navigator.appName = '+navigator.appName+'
    ' +'navigator.userAgent = '+navigator.userAgent+'
    ' )

    Adicionando minha própria implementação da resposta de Hermann. Eu precisava de detecção do SO, de modo que foi adicionado. Também inclui algum código ES6 (porque temos um transpilador) que você pode precisar para o ES5-ify.

     detectClient() { let nav = navigator.appVersion, os = 'unknown', client = (() => { let agent = navigator.userAgent, engine = agent.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [], build; if(/trident/i.test(engine[1])){ build = /\brv[ :]+(\d+)/g.exec(agent) || []; return {browser:'IE', version:(build[1] || '')}; } if(engine[1] === 'Chrome'){ build = agent.match(/\bOPR\/(\d+)/); if(build !== null) { return {browser: 'Opera', version: build[1]}; } } engine = engine[2] ? [engine[1], engine[2]] : [navigator.appName, nav, '-?']; if((build = agent.match(/version\/(\d+)/i)) !== null) { engine.splice(1, 1, build[1]); } return { browser: engine[0], version: engine[1] }; })(); switch (true) { case nav.indexOf('Win') > -1: os = 'Windows'; break; case nav.indexOf('Mac') > -1: os = 'MacOS'; break; case nav.indexOf('X11') > -1: os = 'UNIX'; break; case nav.indexOf('Linux') > -1: os = 'Linux'; break; } client.os = os; return client; } 

    Retorna: Object {browser: "Chrome", version: "50", os: "UNIX"}

     var ua = navigator.userAgent; if (/Firefox\//.test(ua)) var Firefox = /Firefox\/([0-9\.Az]+)/.exec(ua)[1]; 

    Aqui está a versão java para alguém que gostaria de fazê-lo no lado do servidor usando a String retornada por HttpServletRequest.getHeader("User-Agent");

    Ele está trabalhando na configuração de 70 navegadores diferentes que usei para teste.

     public static String decodeBrowser(String userAgent) { userAgent= userAgent.toLowerCase(); String name = "unknown"; String version = "0.0"; Matcher userAgentMatcher = USER_AGENT_MATCHING_PATTERN.matcher(userAgent); if (userAgentMatcher.find()) { name = userAgentMatcher.group(1); version = userAgentMatcher.group(2); if ("trident".equals(name)) { name = "msie"; Matcher tridentVersionMatcher = TRIDENT_MATCHING_PATTERN.matcher(userAgent); if (tridentVersionMatcher.find()) { version = tridentVersionMatcher.group(1); } } } return name + " " + version; } private static final Pattern USER_AGENT_MATCHING_PATTERN=Pattern.compile("(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*([\\d\\.]+)"); private static final Pattern TRIDENT_MATCHING_PATTERN=Pattern.compile("\\brv[ :]+(\\d+(\\.\\d+)?)"); 

    Eu escrevi isso para minhas necessidades.

    Obter informações como se é um dispositivo móvel ou se tem um display retina

    tente

     var nav = { isMobile:function(){ return (navigator.userAgent.match(/iPhone|iPad|iPod|Android|BlackBerry|Opera Mini|IEMobile/i) != null); }, isDesktop:function(){ return (navigator.userAgent.match(/iPhone|iPad|iPod|Android|BlackBerry|Opera Mini|IEMobile/i) == null); }, isAndroid: function() { return navigator.userAgent.match(/Android/i); }, isBlackBerry: function() { return navigator.userAgent.match(/BlackBerry/i); }, isIOS: function() { return navigator.userAgent.match(/iPhone|iPad|iPod/i); }, isOpera: function() { return navigator.userAgent.match(/Opera Mini/i); }, isWindows: function() { return navigator.userAgent.match(/IEMobile/i); }, isRetina:function(){ return window.devicePixelRatio && window.devicePixelRatio > 1; }, isIPad:function(){ isIPad = (/ipad/gi).test(navigator.platform); return isIPad; }, isLandscape:function(){ if(window.innerHeight < window.innerWidth){ return true; } return false; }, getIOSVersion:function(){ if(this.isIOS()){ var OSVersion = navigator.appVersion.match(/OS (\d+_\d+)/i); OSVersion = OSVersion[1] ? +OSVersion[1].replace('_', '.') : 0; return OSVersion; } else return false; }, isStandAlone:function(){ if(_.is(navigator.standalone)) return navigator.standalone; return false; }, isChrome:function(){ var isChrome = (/Chrome/gi).test(navigator.appVersion); var isSafari = (/Safari/gi).test(navigator.appVersion) return isChrome && isSafari; }, isSafari:function(){ var isSafari = (/Safari/gi).test(navigator.appVersion) var isChrome = (/Chrome/gi).test(navigator.appVersion) return !isChrome && isSafari; } } 

    Eu uso isso para obter o nome e o número (int) da versão do navegador real:

     function getInfoBrowser() { 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: 'Explorer', version: parseInt((tem[1] || '')) }; } if (M[1] === 'Chrome') { tem = ua.match(/\b(OPR|Edge)\/(\d+)/); if (tem != null) { let app = tem.slice(1).toString().split(','); return { name: app[0].replace('OPR', 'Opera'), version: parseInt(app[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: parseInt(M[1]) }; } function getBrowser(){ let info = getInfoBrowser(); $("#i-name").html(info.name); $("#i-version").html(info.version); } 
       
    Name:
    Version:

    Quero compartilhar esse código que escrevi para o problema que tive de resolver. Foi testado na maioria dos principais navegadores e funciona como um encanto para mim!

    Pode parecer que esse código é muito parecido com as outras respostas, mas ele foi modificado para que eu possa usá-lo no object do navegador no jquery que perdeu para mim recentemente, é claro que é uma combinação dos códigos acima, com pequenas melhorias de minha parte eu fiz:

     (function($, ua){ var M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [], tem, res; if(/trident/i.test(M[1])){ tem = /\brv[ :]+(\d+)/g.exec(ua) || []; res = 'IE ' + (tem[1] || ''); } else if(M[1] === 'Chrome'){ tem = ua.match(/\b(OPR|Edge)\/(\d+)/); if(tem != null) res = tem.slice(1).join(' ').replace('OPR', 'Opera'); else res = [M[1], M[2]]; } else { M = M[2]? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?']; if((tem = ua.match(/version\/(\d+)/i)) != null) M = M.splice(1, 1, tem[1]); res = M; } res = typeof res === 'string'? res.split(' ') : res; $.browser = { name: res[0], version: res[1], msie: /msie|ie/i.test(res[0]), firefox: /firefox/i.test(res[0]), opera: /opera/i.test(res[0]), chrome: /chrome/i.test(res[0]), edge: /edge/i.test(res[0]) } })(!!jQuery? jQuery : window.$, navigator.userAgent); console.log($.browser.name, $.browser.version, $.browser.msie); // if IE 11 output is: IE 11 true 
     var nVer = navigator.appVersion; var nAgt = navigator.userAgent; var browserName = navigator.appName; var fullVersion = '' + parseFloat(navigator.appVersion); var majorVersion = parseInt(navigator.appVersion, 10); var nameOffset, verOffset, ix; // In Opera 15+, the true version is after "OPR/" if ((verOffset = nAgt.indexOf("OPR/")) != -1) { browserName = "Opera"; fullVersion = nAgt.substring(verOffset + 4); } // In older Opera, the true version is after "Opera" or after "Version" else if ((verOffset = nAgt.indexOf("Opera")) != -1) { browserName = "Opera"; fullVersion = nAgt.substring(verOffset + 6); if ((verOffset = nAgt.indexOf("Version")) != -1) fullVersion = nAgt.substring(verOffset + 8); } // In MSIE, the true version is after "MSIE" in userAgent else if ((verOffset = nAgt.indexOf("MSIE")) != -1) { browserName = "Microsoft Internet Explorer"; fullVersion = nAgt.substring(verOffset + 5); } // In Chrome, the true version is after "Chrome" else if ((verOffset = nAgt.indexOf("Chrome")) != -1) { browserName = "Google Chrome"; fullVersion = nAgt.substring(verOffset + 7); } // In Safari, the true version is after "Safari" or after "Version" else if ((verOffset = nAgt.indexOf("Safari")) != -1) { browserName = "Safari"; fullVersion = nAgt.substring(verOffset + 7); if ((verOffset = nAgt.indexOf("Version")) != -1) fullVersion = nAgt.substring(verOffset + 8); } // In Firefox, the true version is after "Firefox" else if ((verOffset = nAgt.indexOf("Firefox")) != -1) { browserName = "Mozilla Firefox"; fullVersion = nAgt.substring(verOffset + 8); } // In most other browsers, "name/version" is at the end of userAgent else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) { browserName = nAgt.substring(nameOffset, verOffset); fullVersion = nAgt.substring(verOffset + 1); if (browserName.toLowerCase() == browserName.toUpperCase()) { browserName = navigator.appName; } } // trim the fullVersion string at semicolon/space if present if ((ix = fullVersion.indexOf(';')) != -1) fullVersion = fullVersion.substring(0, ix); if ((ix = fullVersion.indexOf(' ')) != -1) fullVersion = fullVersion.substring(0, ix); majorVersion = parseInt('' + fullVersion, 10); if (isNaN(majorVersion)) { fullVersion = '' + parseFloat(navigator.appVersion); majorVersion = parseInt(navigator.appVersion, 10); }