ChatGPT解决这个技术问题 Extra ChatGPT

如何检测浏览器的版本?

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

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

我建议设置一个经过验证的库而不是小块代码:* github.com/bestiejs/platform.js * github.com/ded/bowser 两者都具有 > 1,000 颗星
您可以使用 UAParser JavaScript 库来检测浏览器及其版本。我是按照这个How to detect browser, engine, OS, CPU, and device using JavaScript?做的

C
Community

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

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); // 输出:`Chrome 62`


刚刚发现将浏览器 IE11 降级为显示 Mozilla/4.0 的 IE10 导航用户代理的严重问题(兼容;MSIE 7.0;Windows NT 6.1;WOW64;Trident/6.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) 使用 trident/6.0 将其 IE7 字符串小心
如果此答案包含输出示例,那将很有帮助。我不知道该函数期望什么字符串。
尚未考虑 Edge:tem = ua.match(/\b(OPR|Edge)\/(\d+)/i); if (tem != null) return {name : tem[1] === 'OPR' ? 'Opera' : tem[1], version : tem[2]};
此脚本错误地报告内部 Facebook 浏览器的浏览器 Chrome 版本 4.0(当您在 Android 上的 Facebook 应用程序中单击 Web 链接时启动)。 useragent 字符串看起来像: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;] 这是一个非常突出的用户代理,所以不能真正忽略它......
有一些图书馆可以做到这一点,即 bowser,作为一般规则,如果你不需要,你不应该重新发明轮子。
m
murb

这是对 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) || [];返回 {name:'IE',version:(tem[1]||'')}; } if(M[1]==='Chrome'){ tem=ua.match(/\bOPR|Edge\/(\d+)/) if(tem!=null) {return {name:'Opera',版本: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],版本:M[1] }; } var browser=get_browser(); // browser.name = 'Chrome' // browser.version = '40' console.log(browser);

这样你就可以保护自己免受代码的晦涩难懂。


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

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

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

var 结果 = bowser.getParser(window.navigator.userAgent);控制台.log(结果); document.write("你正在使用 " + result.parsedResult.browser.name + " v" + result.parsedResult.browser.version + " on " + result.parsedResult.os.name);

*支持基于 Chromium 的 Edge

由 bestiejs 编写的 Platform.js - 2,250★s - 最后更新于 2018 年 10 月 30 日 - 5.9KB

控制台.log(平台); document.write("你正在使用 " + platform.name + " v" + platform.version + " on " + platform.os);

jQuery Browser by gabceb - 504★s - 最后更新于 2015 年 11 月 23 日 - 1.3KB

console.log($.browser) document.write("你正在使用 " + $.browser.name + " v" + $.browser.versionNumber + " on " + $.browser.platform);

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

var 结果 = 检测.parse(navigator.userAgent);控制台.log(结果); document.write("你正在使用 " + result.browser.family + " v" + result.browser.version + " on " + result.os.family);

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

console.log(BrowserDetect) document.write("你正在使用 " + BrowserDetect.browser + " v" + BrowserDetect.version + " on " + BrowserDetect.OS);

值得注意的提及:

WhichBrowser - 1,355★s - 最后更新于 2018 年 10 月 2 日

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

延伸阅读

Stack Overflow - JavaScript 中的浏览器检测?

Stack Overflow - 如何检测 Safari、Chrome、IE、Firefox 和 Opera 浏览器?


E
Erman Kadir Kahraman

这结合了 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') { // 为 Firefox 做点什么。 if (navigator.browserSpecs.version > 42) { // 为大于 42 的 Firefox 版本做一些事情。 } } else { // 为所有其他浏览器做一些事情。 }


M
Michael Cole

bowser JavaScript 库提供此功能。

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

它似乎维护得很好。


O
Oliver Moran

使用这个:http://www.quirksmode.org/js/detect.html

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

过时的参考,不再支持-“这个页面曾经包含我自己的浏览器检测脚本,但我发现我没有足够的时间来更新它。因此我删除了它。”
E
Erman Kadir Kahraman

我一直在为自己寻找解决方案,因为 jQuery 1.9.1 及更高版本已删除 $.browser 功能。我想出了这个对我有用的小功能。它确实需要一个全局变量(我叫我的_browser)来检查它是哪个浏览器。我写了一个 jsfiddle 来说明它是如何使用的,当然它可以通过为 _browser.foo 添加一个测试来扩展到其他浏览器,其中 foo 是浏览器的名称。我只做了流行的。

detectBrowser()

_浏览器 = {};函数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 = 匹配?匹配[1]:“”; } 休息; } } _browser.opera = _browser.opr;删除_browser.opr; } 检测浏览器(); console.log(_browser)

要检查当前浏览器是否是 Opera,你会这样做

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

编辑 修复了格式,修复了 IE11 和 Opera/Chrome 的检测,从结果更改为 browserResult。现在 _browser 键的顺序无关紧要。更新了 jsFiddle 链接。

2015/08/11 编辑为 Internet Explorer 12 (EDGE) 添加了新的测试用例,修复了一个小的正则表达式问题。更新了 jsFiddle 链接。


对于 Windows 10 中的新 IE Edge(又名 Spartan),它显示我的浏览器是 Chrome 42 --- 用户代理字符串:mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/42.0 .2311.135 safari/537.36 edge/12.10240 浏览器是chrome 42
感谢@Rulisp 的评论并提供示例uagent,因为我没有Edge 或Win10。从它开始,我已经更新了 jsFiddle 中的代码以反映这一点。如果您想使用您给我的示例 uagent 进行测试,只需转到 this fiddle。让我知道是否有问题。
M
Michael Bleidistel
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;
}

这将返回一个数组,第一个元素是浏览器名称,第二个元素是字符串格式的完整版本号。


m
mVChr

在纯 Javascript 中,您可以在 navigator.userAgent 上进行 RegExp 匹配以查找 Firefox 版本:

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

如果不是 Firefox 浏览器,ffVersion 将是 undefined

See working example →


M
Marek

jQuery 可以很好地处理这个问题 (jQuery.browser)

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

编辑:正如 Joshua 在下面的评论中所写,自 1.9 版起,jQuery 不再支持 jQuery.browser 属性(有关详细信息,请阅读 jQuery 1.9 release notes)。 jQuery 开发团队 recommends 使用更完整的方法,例如使用 Modernizr 库调整 UI。


jQuery 1.9 已经移除了 $.browser 支持,所以这不再是一个选项。
约书亚 - 是的,你是对的;至少他们留下了 jQuery.support 属性来检测浏览器对某些功能的支持(但我不确定这是否是最初问题的情况)
Y
YunHan

这是 Fzs2 和 kennebec 对于 New Edge Chromium 的更新

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) || [];返回 {name:'IE',version:(tem[1]||'')}; } if(M[1]==='Chrome'){ tem=ua.match(/\bEdg\/(\d+)/) if(tem!=null) {return {name:'Edge(Chromium)' , version:tem[1]};} tem=ua.match(/\bOPR\/(\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],版本:M[1] }; } var browser=get_browser(); // browser.name = 'Edge(Chromium)' // browser.version = '86' console.log(browser);


R
Ry-

查看 navigator.userAgent - Firefox/xxx.xxx.xxx 在末尾指定。


W
WEFX
<script type="text/javascript">
var version = navigator.appVersion;
alert(version);
</script>

J
Jez

我根据 Hermann Ingjaldsson 的回答编写了一个版本检测器,但更健壮,它返回一个包含名称/版本数据的对象。它涵盖了主要的浏览器,但我不关心过多的移动浏览器和次要浏览器:

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

然后可以像这样使用它:

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

n
newTag
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+'<br>'
 +'Full version  = '+fullVersion+'<br>'
 +'Major version = '+majorVersion+'<br>'
 +'navigator.appName = '+navigator.appName+'<br>'
 +'navigator.userAgent = '+navigator.userAgent+'<br>'
)

在此处查看演示..http://jsfiddle.net/hw4jM/3/


A
Ankit

检测浏览器及其版本

此代码段基于来自 MDN 的文章。他们在其中简要提示了可用于检测浏览器名称的各种关键字。

https://i.stack.imgur.com/BUfGl.png

我做了一些更改来检测 Edge 和 UCBrowser 等浏览器

getBrowser = () => { const userAgent = navigator.userAgent;让浏览器=“未知”; // 检测浏览器名称 browser = (/ucbrowser/i).test(userAgent) ? 'UCBrowser' : 浏览器;浏览器 = (/edg/i).test(userAgent) ? “边缘”:浏览器;浏览器 = (/googlebot/i).test(userAgent) ? 'GoogleBot' : 浏览器;浏览器 = (/chromium/i).test(userAgent) ? “铬”:浏览器;浏览器 = (/firefox|fxios/i).test(userAgent) && !(/seamonkey/i).test(userAgent) ? 'Firefox' : 浏览器; browser = (/; msie|trident/i).test(userAgent) && !(/ucbrowser/i).test(userAgent) ? 'IE' : 浏览器; browser = (/chrome|crios/i).test(userAgent) && !(/opr|opera|chromium|edg|ucbrowser|googlebot/i).test(userAgent) ? 'Chrome' : 浏览器;; browser = (/safari/i).test(userAgent) && !(/chromium|edg|ucbrowser|chrome|crios|opr|opera|fxios|firefox/i).test(userAgent) ? 'Safari' : 浏览器;浏览器 = (/opr|opera/i).test(userAgent) ? 'Opera' : 浏览器; // 检测浏览器版本切换 (browser) { case 'UCBrowser': return `${browser}/${browserVersion(userAgent,/(ucbrowser)\/([\d\.]+)/i)}`;案例'Edge':返回`${browser}/${browserVersion(userAgent,/(edge|edga|edgios|edg)\/([\d\.]+)/i)}`;案例“GoogleBot”:返回 `${browser}/${browserVersion(userAgent,/(googlebot)\/([\d\.]+)/i)}`; case 'Chromium': return `${browser}/${browserVersion(userAgent,/(chromium)\/([\d\.]+)/i)}`; case 'Firefox': 返回 `${browser}/${browserVersion(userAgent,/(firefox|fxios)\/([\d\.]+)/i)}`;案例“Chrome”:返回 `${browser}/${browserVersion(userAgent,/(chrome|crios)\/([\d\.]+)/i)}`; case 'Safari': return `${browser}/${browserVersion(userAgent,/(safari)\/([\d\.]+)/i)}`; case 'Opera': return `${browser}/${browserVersion(userAgent,/(opera|opr)\/([\d\.]+)/i)}`; case 'IE': const version = browserVersion(userAgent,/(trident)\/([\d\.]+)/i); // IE 版本使用 trident 版本映射 // IE/8.0 = Trident/4.0, IE/9.0 = Trident/5.0 返回版本 ? `${browser}/${parseFloat(version) + 4.0}` : `${browser}/7.0`;默认值:返回“未知/0.0.0.0”; } } browserVersion = (userAgent,regex) => { return userAgent.match(regex) ? userAgent.match(regex)[2] : null; } console.log(getBrowser());


S
Suryanshu Sahay

为此,您需要检查 navigator.appVersion 或 navigator.userAgent 的值尝试使用:

console.log(navigator.appVersion)

P
Pål Sølvberg

我在 ASP 代码中制作了一个脚本来检测浏览器、浏览器版本、操作系统和操作系统版本。我在 ASP 中这样做的原因是因为我想将数据存储在日志数据库中。所以我不得不检测浏览器服务器端。

这是代码:

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 "<br>" & ua & "<br>" & BrowserType & "<br>" & BrVer & "<br>" & OS & "<br>" & OSver & "<br>"

'Use the variables here for whatever you need........

C
Chazmus

This page 似乎有一个非常不错的代码段,它只使用 appString 和 appVersion 属性作为最后的手段,因为它声称它们在某些浏览器中不可靠。页面代码如下:

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+'<br>'
 +'Full version  = '+fullVersion+'<br>'
 +'Major version = '+majorVersion+'<br>'
 +'navigator.appName = '+navigator.appName+'<br>'
 +'navigator.userAgent = '+navigator.userAgent+'<br>'
)

r
relic

添加我自己对赫尔曼答案的实现。我需要操作系统检测,因此已添加。还包括一些您可能需要 ES5 化的 ES6 代码(因为我们有一个转译器)。

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

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


C
Christiyan

我想分享我为必须解决的问题编写的这段代码。它在大多数主要浏览器中都经过了测试,对我来说就像一个魅力!

似乎这段代码与其他答案非常相似,但它进行了修改,以便我可以在 jquery 中使用它插入浏览器对象,这对我来说最近错过了,当然它是上述代码的组合,几乎没有改进我的部分:

(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

G
GoharSahi

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); // 输出:`Chrome 62`


F
Fabian Montoya

我用它来获取实际浏览器版本的名称和编号(int):

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 { 名称:'Explorer',版本: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]);返回{名称:M[0],版本:parseInt(M[1])}; } function getBrowser(){ 让 info = getInfoBrowser(); $("#i-name").html(info.name); $("#i-version").html(info.version); }


名称:
版本:

这个跑进

铬合金 ;火狐;苹果浏览器 ; Internet Explorer (>= 9) ;歌剧;边缘

为了我。


T
Tushar Walzade

对于任何使用 Angular 的 PWA 应用程序,您可以将代码放在 index.html 的正文部分中以检查是否支持浏览器 -

<body>
    <div id="browser"></div>
    <script>
        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;
        }
    </script>
</body>

B
Binyamin

在这里,这比@kennebec 片段具有更好的兼容性;将返回浏览器名称和版本(返回 72 而不是 72.0.3626.96)。

在 Safari、Chrome、Opera、Firefox、IE、Edge、UCBrowser 以及移动设备上进行了测试。

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

M
McKayla
var ua = navigator.userAgent;

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

M
Marco Allori

我写这个是为了我的需要。

它获取信息,例如是否是移动设备或是否具有视网膜显示器

try it

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

注意:不要依赖 navigator.appVersion 属性来返回正确的浏览器版本。已弃用
G
Gaëtan LOISEL

我根据我在其他帖子中找到的内容使用了这段 javascript 代码。

var browserHelper = function () { var self = {}; /// IE 6+ self.isIEBrowser = function () { return /*@cc_on!@*/false || !!document.documentMode; }; /// Opera 8.0+ self.isOperaBrowser = function () { return (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf('OPR/') >= 0; }; /// Firefox 1.0+ self.isFirefoxBrowser = function () { return typeof InstallTrigger !== 'undefined'; }; /// Safari 3.0+ self.isSafariBrowser = function () { return /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || (typeof safari !== 'undefined' && window['safari'] 。推送通知)); }; /// Edge 20+ self.isEdgeBrowser = function () { return !self.isIEBrowser() && !!window.StyleMedia; }; /// Chrome 1 - 87 self.isChromeBrowser = function () { return (!!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime)) || (navigator.userAgent.indexOf("Chrome") > -1) && !self.isOperaBrowser(); }; /// 边缘(基于铬) self.isEdgeChromiumBrowser = function () { return self.isChromeBrowser() && (navigator.userAgent.indexOf("Edg") != -1); }; /// 闪烁 self.isBlinkBasedOnBrowser = function () { return (self.isChromeBrowser() || self.isOperaBrowser()) && !!window.CSS; }; /// 返回导航器的名称 self.browserName = function () { if (self.isOperaBrowser()) return "Opera";如果(self.isEdgeBrowser())返回“边缘”; if (self.isEdgeChromiumBrowser()) return "Edge (based on chromium)"; if (self.isFirefoxBrowser()) 返回“火狐”; if (self.isIEBrowser()) 返回“Internet Explorer”; if (self.isSafariBrowser()) 返回“Safari”; if (self.isChromeBrowser()) return "Chrome";返回“未知”; };回归自我; }; var bName = document.getElementById('browserName'); bName.innerText = browserHelper().browserName(); #browserName { 字体系列:Arial,Verdana;字体大小:1.2rem;颜色:#ff8000;文本对齐:居中;边框:2px 实心#ff8000;边界半径:0.5rem;填充:0.5rem;最大宽度:25%;边距:自动; }


f
firstlord

对于 chromium 浏览器来说就是这么简单。

版本:navigator.userAgentData.brands[0].version

浏览器名称:navigator.userAgentData.brands[0].brand


在 Chromium 中,这些对我来说是空的。
请注意,仅从 chromium 90 (developer.mozilla.org/en-US/docs/Web/API/Navigator/…) 开始支持此功能
R
Ramya

这让我得到了 Firefox 的版本,

    let versionNumber = parseInt(window.navigator.userAgent.match(/Firefox\/([0- 
    9]+)\./)[1]);