How can you detect the version of a browser?
我一直在四处搜索代码,以检测访问该网站的用户是否拥有火狐3或4。我找到的只是检测浏览器类型的代码,而不是版本。
如何检测这样的浏览器版本?
您可以看到浏览器所说的内容,并使用这些信息记录或测试多个浏览器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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` |
。
这是对Kennebec答案的改进。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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] }; } |
然后你就跑:
1 2 3 | var browser=get_browser(); // browser.name = 'Chrome' // browser.version = '40' |
。
这样你就可以保护自己不受代码的蒙蔽。
这结合了Kennebec的(k)答案和Hermann Ingjaldsson的(h)答案:
- 保持原始答案的最小代码。(k)
- 使用Microsoft Edge(K)
- 扩展导航器对象,而不是创建新的变量/对象。(k)
- 将浏览器版本和名称分隔为独立的子对象。(h)
nbsp;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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. } |
bowser javascript库提供了这个功能。
1 2 3 | if (bowser.msie && bowser.version <= 6) { alert('Hello China'); } |
号
它似乎保养得很好。
使用:http://www.quirksmode.org/js/detect.html
1 2 | alert(BrowserDetect.browser); // will say"Firefox" alert(BrowserDetect.version); // will say"3" or"4" |
。
从2019年5月起,这里有几个处理浏览器检测的著名库。
Bowser by Lanedikson-3761S-最新更新日期:2019年5月26日-4.8KB1 2 3 4 5 | 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); |
1 |
。
*基于铬的支撑边缘
platform.js by bestiejs-2250s-最新更新日期:2018年10月30日-5.9kb1 2 3 4 | console.log(platform); document.write("You are using" + platform.name + " v" + platform.version + " on" + platform.os); |
1 | <script src="https://cdnjs.cloudflare.com/ajax/libs/platform/1.3.5/platform.min.js"> |
。
jquery browser by gabceb-504s-上次更新日期:2015年11月23日-1.3kb1 2 3 4 | console.log($.browser) document.write("You are using" + $.browser.name + " v" + $.browser.versionNumber + " on" + $.browser.platform); |
。
1 2 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-browser/0.1.0/jquery.browser.min.js"> |
1 2 3 4 5 | 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); |
。
1 | <script src="https://cdnjs.cloudflare.com/ajax/libs/Detect.js/2.2.2/detect.min.js"> |
1 2 3 4 | console.log(BrowserDetect) document.write("You are using" + BrowserDetect.browser + " v" + BrowserDetect.version + " on" + BrowserDetect.OS); |
。
1 | <script src="https://kylemit.github.io/libraries/libraries/BrowserDetect.js"> |
号
值得注意的是:- whichbrowser-1355s-最新更新日期:2018年10月2日
- 现代化——23397S——上一次更新于2019年1月12日——为了喂饲马,功能检测应该会引发任何犬类风格的问题。浏览器检测实际上只是为单个浏览器提供定制的图像、下载文件或说明。
进一步阅读
- 栈溢出-浏览器在javascript中检测?
- 堆栈溢出-如何检测Safari、Chrome、IE、Firefox和Opera浏览器?
我在为自己寻找解决方案,因为jquery 1.9.1及更高版本已经删除了
检测浏览器()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | _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; } |
检查当前浏览器是否为Opera
1 | if (_browser.opera) { // Opera specific code } |
。
编辑修复了格式设置,修复了IE11和Opera/Chrome的检测,并从结果更改为浏览结果。现在,
2015/08/11编辑为Internet Explorer 12(Edge)添加了新的测试用例,修复了一个小的regexp问题。更新了jsFiddle链接。
1 2 3 4 5 6 7 8 | 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; } |
号
这将返回一个数组,第一个元素是浏览器名称,第二个元素是字符串格式的完整版本号。
jquery可以很好地处理这个问题(jquery.browser)
1 2 3 4 | var ua = $.browser; if ( ua.mozilla && ua.version.slice(0,3) =="1.9" ) { alert("Do stuff for firefox 3" ); } |
编辑:正如Joshua在下面的评论中所写,jquery.browser属性自1.9版以来不再受jquery的支持(有关详细信息,请阅读jquery 1.9发行说明)。jquery开发团队建议使用更完整的方法,如将UI与现代化库相适应。
在纯javascript中,您可以在
1 2 3 4 5 | var uMatch = navigator.userAgent.match(/Firefox\/(.*)$/), ffVersion; if (uMatch && uMatch.length > 1) { ffVersion = uMatch[1]; } |
如果不是火狐浏览器,
见工作示例&x2192;
看一看
1 2 3 | <script type="text/javascript"> var version = navigator.appVersion; alert(version); |
号
我写了一个版本检测器,它基于HermanIngjaldsson的答案,但是更健壮,它返回一个包含名称/版本数据的对象。它涵盖了主要的浏览器,但我不担心过多的移动浏览器和次要浏览器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 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; }; |
号
然后可以这样使用:
1 2 3 4 | var brData = getBrowserData(window.navigator || navigator); console.log('name: ' + brData.name); console.log('major version: ' + brData.version.major); // etc. |
号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | 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+'' ) |
号
请参阅这里的演示。…http://jsfiddle.net/hw4jm/3/
这个页面似乎有一个非常好的代码片段,它只使用appstring和appversion属性作为最后的手段,因为它声称它们在某些浏览器中不可靠。页面上的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 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+'' ) |
号
我用ASP代码编写了一个脚本来检测浏览器、浏览器版本、操作系统和操作系统版本。我在ASP中这样做的原因是因为我想将数据存储在日志数据库中。所以我必须检测浏览器服务器端。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | 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........ |
。
添加我自己对赫尔曼答案的实现。我需要操作系统检测,所以已经添加了。还包括一些ES6代码(因为我们有一个蒸腾器),您可能需要ES5验证。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | 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; } |
号
返回:
我使用它来获取实际浏览器版本的de name和number(int):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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); } |
1 2 3 4 5 6 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> <input type="button" onclick="getBrowser();" value="Get Info Browser"/> <hr/> Name: <span id="i-name"></span><br/> Version: <span id="i-version"></span> |
号
这次磨合
chrome;firefox;safari;Internet Explorer(>=9);opera;edge
为了我。
这里的兼容性比@kennebec snippet好;将返回浏览器名称和版本(返回72而不是72.0.3626.96)。
在Safari、Chrome、Opera、Firefox、IE、Edge、UCBrowser以及移动设备上测试。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | function browser() { var userAgent = navigator.userAgent, match = userAgent.match(/(opera|chrome|crios|safari|ucbrowser|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [], result = {}, tem; if (/trident/i.test(match[1])) { tem = /\brv[ :]+(\d+)/g.exec(userAgent) || []; result.name ="Internet Explorer"; } else if (match[1] ==="Chrome") { tem = userAgent.match(/\b(OPR|Edge)\/(\d+)/); if (tem && tem[1]) { result.name = tem[0].indexOf("Edge") === 0 ?"Edge" :"Opera"; } } if (!result.name) { tem = userAgent.match(/version\/(\d+)/i); // iOS support result.name = match[0].replace(/\/.*/,""); if (result.name.indexOf("MSIE") === 0) { result.name ="Internet Explorer"; } if (userAgent.match("CriOS")) { result.name ="Chrome"; } } if (tem && tem.length) { match[match.length - 1] = tem[tem.length - 1]; } result.version = Number(match[match.length - 1]); return result; } |
号
下面是Java版本的SOMMONE,它希望使用EDCOX1(7)返回的字符串在服务器端进行它。
它正在处理我用于测试的70种不同的浏览器配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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+)?)"); |
号
我写这个是为了我的需要。
它得到的信息就像是一个移动设备或者视网膜显示器
试试看
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 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; } } |
号
1 2 3 4 | var ua = navigator.userAgent; if (/Firefox\//.test(ua)) var Firefox = /Firefox\/([0-9\.A-z]+)/.exec(ua)[1]; |
我想分享我为必须解决的问题编写的代码。它在大多数主要浏览器中都经过了测试,对我来说,它的工作方式很有魅力!
这段代码似乎与其他答案非常相似,但它经过了修改,以便我可以使用jquery中浏览器对象的insted,而jquery最近对我来说是一个遗漏,当然这是上述代码的组合,对我的部分做了一些改进:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | (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]) } })(typeof jQuery != 'undefined'? jQuery : window.$, navigator.userAgent); console.log($.browser.name, $.browser.version, $.browser.msie); // if IE 11 output is: IE 11 true |
号
对于任何使用Angular的PWA应用程序,您可以将代码放入index.html的body部分,以检查浏览器是否受支持。-
1 2 3 4 5 6 7 8 9 10 11 12 13 | <body> var operabrowser = true; operabrowser = (navigator.userAgent.indexOf('Opera Mini') > -1); if (operabrowser) { txt ="<p> Browser not supported use different browser... </p>"; document.getElementById("browser").innerHTML = txt; } </body> |
号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 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); } |
。