如何使用 JavaScript 检测我的浏览器版本和操作系统?

IT技术 javascript browser operating-system version
2021-01-30 21:12:28

我试过使用下面的代码,但它只在 Chrome 和 Mozilla 中显示结果,在 IE6 中不起作用。

<div id="example"></div>

<script type="text/javascript">

txt = "<p>Browser CodeName: " + navigator.appCodeName + "</p>";
txt+= "<p>Browser Name: " + navigator.appName + "</p>";
txt+= "<p>Browser Version: " + navigator.appVersion + "</p>";
txt+= "<p>Cookies Enabled: " + navigator.cookieEnabled + "</p>";
txt+= "<p>Platform: " + navigator.platform + "</p>";
txt+= "<p>User-agent header: " + navigator.userAgent + "</p>";

document.getElementById("example").innerHTML=txt;

</script>

输出:

Browser CodeName: Mozilla

Browser Name: Netscape

Browser Version: 5.0 (Windows)

Cookies Enabled: true

Platform: Win32

User-agent header: Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0

我只需要获得“Firefox/12.0”版本。

6个回答

检测浏览器的详细信息:

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>'
)

JavaScript:浏览器名称
请参阅 JSFiddle 以检测浏览器详细信息

检测操作系统:

// This script sets OSName variable as follows:
// "Windows"    for all versions of Windows
// "MacOS"      for all versions of Macintosh OS
// "Linux"      for all versions of Linux
// "UNIX"       for all other UNIX flavors 
// "Unknown OS" indicates failure to detect the OS

var OSName="Unknown OS";
if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows";
if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS";
if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX";
if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux";

document.write('Your OS: '+OSName);

JavaScript:操作系统检测
请参阅 JSFiddle 以检测操作系统详细信息

verOffset=nAgt.indexOf("Opera"))!=-1。这不适用于 Opera 20 及更高版本。
2021-03-16 21:12:28
无法检测边缘。
2021-03-26 21:12:28
此 Javascript 已过时。将 Edge 和 IE 11 报告为“Netscape 5”。建议为此功能使用维护库,如github.com/faisalman/ua-parser-js
2021-03-27 21:12:28
@JohnOdom 新系统(例如即将推出的 Steam 盒)可能有自己的名字;现有系统可能会更改其名称或速记。你永远不会是最新的,除非你使用某种全局数据库来获取信息;因为这完全是专有的。也许有一天,谷歌、W3 等会提供一个 API 来众包并公开所有不同的系统名称及其从用户那里收集的关系。
2021-03-28 21:12:28
你知道我在哪里可以找到 appVersion 的所有可能值吗?那么 appVersion 使用的所有可能的操作系统值?
2021-04-08 21:12:28

更新

我在Platform.js方面有一些很好的经验这里演示),但仍然建议谨慎:

原帖

我想向您推荐WhichBrowser的作者每个人都在撒谎

基本上,没有浏览器是诚实的。无论您使用 Chrome 还是 IE,它们都会告诉您它们是支持 Gecko 和 Safari 的“Mozilla Netscape”。在此线程中飞来飞去的任何小提琴上自己尝试一下:

hiss056 的小提琴

哈里哈兰的小提琴

或任何其他...用 Chrome 试试(它可能仍然成功),然后用最新版本的 IE 试试,你会哭的。当然,有一些启发式方法可以解决问题,但是掌握所有边缘情况会很乏味,而且它们很可能在一年内不再起作用。

以您的代码为例:

<div id="example"></div>
<script type="text/javascript">
txt = "<p>Browser CodeName: " + navigator.appCodeName + "</p>";
txt+= "<p>Browser Name: " + navigator.appName + "</p>";
txt+= "<p>Browser Version: " + navigator.appVersion + "</p>";
txt+= "<p>Cookies Enabled: " + navigator.cookieEnabled + "</p>";
txt+= "<p>Platform: " + navigator.platform + "</p>";
txt+= "<p>User-agent header: " + navigator.userAgent + "</p>";
document.getElementById("example").innerHTML=txt;
</script>

铬 说:

浏览器代号:Mozilla

浏览器名称:Netscape

浏览器版本:5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36

Cookies 已启用:true

平台:Win32

用户代理标头:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/40.0.2214.115 Safari/537.36

IE 说:

浏览器代号:Mozilla

浏览器名称:Netscape

浏览器版本:5.0(Windows NT 6.1;WOW64;Trident/7.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;Media Center PC 6.0;.NET4.0C; .0E; InfoPath.3; rv:11.0) 像 Gecko

Cookies 已启用:true

平台:Win32

用户代理标头:Mozilla/5.0(Windows NT 6.1;WOW64;Trident/7.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;Media Center PC 6.0;.NET4 0C; .NET4.0E; InfoPath.3; rv:11.0) 像 Gecko

至少 Chrome 仍然有一个字符串,其中包含具有确切版本号的“Chrome”。但是,对于 IE,您必须从它支持的内容中推断出它的实际情况(还有谁会吹嘘他们支持.NETMedia Center:P),然后将其与最后的 匹配rv:以获取版本号。当然,一旦 IE 12(或任何他们想叫的名字)出来,即使是这样复杂的启发式方法也很可能会失败。

它为 Opera 浏览器显示 Chrome。
2021-03-22 21:12:28
其中一些属性是“为向后兼容而保留的”,例如所有浏览器都会为navigator.appNamedeveloper.mozilla.org/en-US/docs/Web/API/NavigatorID返回“Netscape”
2021-03-31 21:12:28

有一个用于此目的的库:https : //github.com/bestiejs/platform.js#readme

那么你可以这样使用它

// example 1
platform.os; // 'Windows Server 2008 R2 / 7 x64'

// example 2 on an iPad
platform.os; // 'iOS 5.0'

// you can also access on the browser and some other properties
platform.name; // 'Safari'
platform.version; // '5.1'
platform.product; // 'iPad'
platform.manufacturer; // 'Apple'
platform.layout; // 'WebKit'

// or use the description to put all together
platform.description; // 'Safari 5.1 on Apple iPad (iOS 5.0)'
请注意,从这里答案中所有指向 github-libraries 的链接来看,这个库似乎是最新的(写于 2018 年 5 月,最后一次提交是“3 个月前”)
2021-03-16 21:12:28

要使用 JavaScript 检测操作系统,最好使用 navigator.userAgent 而不是 navigator.appVersion

{
  var OSName = "Unknown OS";
  if (navigator.userAgent.indexOf("Win") != -1) OSName = "Windows";
  if (navigator.userAgent.indexOf("Mac") != -1) OSName = "Macintosh";
  if (navigator.userAgent.indexOf("Linux") != -1) OSName = "Linux";
  if (navigator.userAgent.indexOf("Android") != -1) OSName = "Android";
  if (navigator.userAgent.indexOf("like Mac") != -1) OSName = "iOS";
  console.log('Your OS: ' + OSName);
}

@SystemsRebooter 感谢您的评论,您可以将它们添加为其他人。
2021-03-16 21:12:28
很好的答案,这很有帮助
2021-03-29 21:12:28
点赞。此外,如果您能解释为什么它更好,那将非常有帮助:) 此外,似乎错过了“UNIX/X11”。
2021-04-07 21:12:28

PPK 的脚本是这类事情的权威,正如@Jalpesh 所说,这可能会为您指明正确的方式

var wn = window.navigator,
        platform = wn.platform.toString().toLowerCase(),
        userAgent = wn.userAgent.toLowerCase(),
        storedName;

// ie
    if (userAgent.indexOf('msie',0) !== -1) {
        browserName = 'ie';
        os = 'win';
        storedName = userAgent.match(/msie[ ]\d{1}/).toString();
        version = storedName.replace(/msie[ ]/,'');

        browserOsVersion = browserName + version;
    }

摘自https://github.com/leopic/jquery.detectBrowser.js/blob/sans-jquery/jquery.detectBrowser.sansjQuery.js