如何在 Javascript 中获取 PC 中的操作系统版本
Posted
技术标签:
【中文标题】如何在 Javascript 中获取 PC 中的操作系统版本【英文标题】:How to get OS version in PC in Javascript 【发布时间】:2019-03-29 06:32:25 【问题描述】:我需要查找用户设备的操作系统版本。对于移动设备,我知道它是如何完成的,并且已经成功地为 ios 和 android 完成了,但我也需要找到 PC 的操作系统版本
假设我是使用 Ubuntu 16.04 的用户,那么我需要得到这个 来自我的脚本,但现在我得到
"Linux"
作为操作系统
我也试过this。但是导航器中没有提供oscpu
键
var user =
user.device = ;
function findBrowserDetails()
user.device = ;
var unknown = '-';
// screen
var screenSize = '';
if (screen.width)
width = (screen.width) ? screen.width : '';
height = (screen.height) ? screen.height : '';
screenSize += '' + width + " x " + height;
console.log("What i get from above link is--", navigator);
// browser
var nVer = navigator.appVersion;
var nAgt = navigator.userAgent || navigator.vendor || window.opera;
var browser = navigator.appName;
var version = '' + parseFloat(navigator.appVersion);
var majorVersion = parseInt(navigator.appVersion, 10);
var nameOffset, verOffset, ix;
// Opera
if ((verOffset = nAgt.indexOf('Opera')) != -1)
browser = 'Opera';
version = nAgt.substring(verOffset + 6);
if ((verOffset = nAgt.indexOf('Version')) != -1)
version = nAgt.substring(verOffset + 8);
// Opera Next
if ((verOffset = nAgt.indexOf('OPR')) != -1)
browser = 'Opera';
version = nAgt.substring(verOffset + 4);
// Edge
else if ((verOffset = nAgt.indexOf('Edge')) != -1)
browser = 'Microsoft Edge';
version = nAgt.substring(verOffset + 5);
// MSIE
else if ((verOffset = nAgt.indexOf('MSIE')) != -1)
browser = 'Microsoft Internet Explorer';
version = nAgt.substring(verOffset + 5);
// Chrome
else if ((verOffset = nAgt.indexOf('Chrome')) != -1)
browser = 'Chrome';
version = nAgt.substring(verOffset + 7);
// Safari
else if ((verOffset = nAgt.indexOf('Safari')) != -1)
browser = 'Safari';
version = nAgt.substring(verOffset + 7);
if ((verOffset = nAgt.indexOf('Version')) != -1)
version = nAgt.substring(verOffset + 8);
// Firefox
else if ((verOffset = nAgt.indexOf('Firefox')) != -1)
browser = 'Firefox';
version = nAgt.substring(verOffset + 8);
// MSIE 11+
else if (nAgt.indexOf('Trident/') != -1)
browser = 'Microsoft Internet Explorer';
version = nAgt.substring(nAgt.indexOf('rv:') + 3);
// Other browsers
else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/')))
browser = nAgt.substring(nameOffset, verOffset);
version = nAgt.substring(verOffset + 1);
if (browser.toLowerCase() == browser.toUpperCase())
browser = navigator.appName;
// trim the version string
if ((ix = version.indexOf(';')) != -1) version = version.substring(0, ix);
if ((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix);
if ((ix = version.indexOf(')')) != -1) version = version.substring(0, ix);
majorVersion = parseInt('' + version, 10);
if (isNaN(majorVersion))
version = '' + parseFloat(navigator.appVersion);
majorVersion = parseInt(navigator.appVersion, 10);
// mobile version
var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer);
// system
var os = unknown;
var clientStrings = [
s: 'Windows 10',
r: /(Windows 10.0|Windows NT 10.0)/
,
s: 'Windows 8.1',
r: /(Windows 8.1|Windows NT 6.3)/
,
s: 'Windows 8',
r: /(Windows 8|Windows NT 6.2)/
,
s: 'Windows 7',
r: /(Windows 7|Windows NT 6.1)/
,
s: 'Windows Vista',
r: /Windows NT 6.0/
,
s: 'Windows Server 2003',
r: /Windows NT 5.2/
,
s: 'Windows XP',
r: /(Windows NT 5.1|Windows XP)/
,
s: 'Windows 2000',
r: /(Windows NT 5.0|Windows 2000)/
,
s: 'Windows ME',
r: /(Win 9x 4.90|Windows ME)/
,
s: 'Windows 98',
r: /(Windows 98|Win98)/
,
s: 'Windows 95',
r: /(Windows 95|Win95|Windows_95)/
,
s: 'Windows NT 4.0',
r: /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/
,
s: 'Windows CE',
r: /Windows CE/
,
s: 'Windows 3.11',
r: /Win16/
,
s: 'Android',
r: /Android/
,
s: 'Open BSD',
r: /OpenBSD/
,
s: 'Sun OS',
r: /SunOS/
,
s: 'Linux',
r: /(Linux|X11)/
,
s: 'iOS',
r: /(iPhone|iPad|iPod)/
,
s: 'Mac OS X',
r: /Mac OS X/
,
s: 'Mac OS',
r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/
,
s: 'QNX',
r: /QNX/
,
s: 'UNIX',
r: /UNIX/
,
s: 'BeOS',
r: /BeOS/
,
s: 'OS/2',
r: /OS\/2/
,
s: 'Search Bot',
r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/
];
for (var id in clientStrings)
var cs = clientStrings[id];
if (cs.r.test(nAgt))
os = cs.s;
break;
var osVersion = unknown;
if (/Windows/.test(os))
osVersion = /Windows (.*)/.exec(os)[1];
os = 'Windows';
switch (os)
case 'Mac OS X':
osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1];
break;
case 'Android':
osVersion = /Android ([\.\_\d]+)/.exec(nAgt)[1];
break;
case 'iOS':
osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);
osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);
break;
window.jscd =
screen: screenSize,
browser: browser,
browserVersion: version,
browserMajorVersion: majorVersion,
mobile: mobile,
os: os,
osVersion: osVersion,
;
user.device = window.jscd;
//detect device type
if (/windows phone/i.test(nAgt))
user.device.deviceType = "Windows Phone";
else if (/android/i.test(nAgt))
user.device.deviceType = "Android";
else if (/iPad|iPhone|iPod/.test(nAgt) && !window.MSStream)
user.device.deviceType = "iOS";
else
user.device.deviceType = "web";
console.log("This is what so far i fetched", user.device)
findBrowserDetails();
【问题讨论】:
navigator.platform 将为您提供操作系统版本 您可以使用navigator.oscpu
获取操作系统的完整版本详细信息。 developer.mozilla.org/en-US/docs/Web/API/Navigator/oscpu
Chrome 不支持 navigator.oscpu
,如浏览器兼容性表中所示。 developer.mozilla.org/en-US/docs/Web/API/Navigator/…
是的@SamiAhmedSiddiqui 你是对的
navigator.oscpu 在 chrome 中未定义
【参考方案1】:
navigator.platform
这将为您提供操作系统名称,例如
更新
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);
在您的系统上,此脚本产生以下结果:
你的操作系统:Linux
(要获得更详细的操作系统信息,您的脚本应对navigator.appVersion
或navigator.userAgent
执行更复杂的分析,但思路相同。)
【讨论】:
感谢您的回复。但是我不能得到我在问题中描述的版本名称,即 Ubuntu 16.04 之类的吗? 不,我猜不是.. 更多详情请参见link 你根本不能依赖navigator
对象,因为它是由用户代理发送的,因此它可以被伪造:)
所以我想我必须和 navigator.platform 达成一致:(
是的 :) 我在应用程序中使用过它很好【参考方案2】:
您可以从navigator.userAgent
获得操作系统的版本号,但据我所知,您目前无法获得版本名称。
如果您想获取版本号,那么本文可能会帮助您: https://medium.com/creative-technology-concepts-code/detect-device-browser-and-version-using-javascript-8b511906745
这里是完整的代码,为您提供操作系统名称、操作系统版本、浏览器名称和浏览器版本。
(function ()
'use strict';
var module =
options: [],
header: [navigator.platform, navigator.userAgent, navigator.appVersion, navigator.vendor, window.opera],
dataos: [
name: 'Windows Phone', value: 'Windows Phone', version: 'OS' ,
name: 'Windows', value: 'Win', version: 'NT' ,
name: 'iPhone', value: 'iPhone', version: 'OS' ,
name: 'iPad', value: 'iPad', version: 'OS' ,
name: 'Kindle', value: 'Silk', version: 'Silk' ,
name: 'Android', value: 'Android', version: 'Android' ,
name: 'PlayBook', value: 'PlayBook', version: 'OS' ,
name: 'BlackBerry', value: 'BlackBerry', version: '/' ,
name: 'Macintosh', value: 'Mac', version: 'OS X' ,
name: 'Linux', value: 'Linux', version: 'rv' ,
name: 'Palm', value: 'Palm', version: 'PalmOS'
],
databrowser: [
name: 'Chrome', value: 'Chrome', version: 'Chrome' ,
name: 'Firefox', value: 'Firefox', version: 'Firefox' ,
name: 'Safari', value: 'Safari', version: 'Version' ,
name: 'Internet Explorer', value: 'MSIE', version: 'MSIE' ,
name: 'Opera', value: 'Opera', version: 'Opera' ,
name: 'BlackBerry', value: 'CLDC', version: 'CLDC' ,
name: 'Mozilla', value: 'Mozilla', version: 'Mozilla'
],
init: function ()
var agent = this.header.join(' '),
os = this.matchItem(agent, this.dataos),
browser = this.matchItem(agent, this.databrowser);
return os: os, browser: browser ;
,
matchItem: function (string, data)
var i = 0,
j = 0,
html = '',
regex,
regexv,
match,
matches,
version;
for (i = 0; i < data.length; i += 1)
regex = new RegExp(data[i].value, 'i');
match = regex.test(string);
if (match)
regexv = new RegExp(data[i].version + '[- /:;]([\\d._]+)', 'i');
matches = string.match(regexv);
version = '';
if (matches) if (matches[1]) matches = matches[1];
if (matches)
matches = matches.split(/[._]+/);
for (j = 0; j < matches.length; j += 1)
if (j === 0)
version += matches[j] + '.';
else
version += matches[j];
else
version = '0';
return
name: data[i].name,
version: parseFloat(version)
;
return name: 'unknown', version: 0 ;
;
var e = module.init(),
debug = '';
debug += 'os.name = ' + e.os.name + '<br/>';
debug += 'os.version = ' + e.os.version + '<br/>';
debug += 'browser.name = ' + e.browser.name + '<br/>';
debug += 'browser.version = ' + e.browser.version + '<br/>';
document.getElementById('log').innerHTML = debug;
());
<div id="log"></div>
以上代码是从这里复制粘贴的:https://jsfiddle.net/kmturley/Gd6c8/?utm_source=website&utm_medium=embed&utm_campaign=Gd6c8
如果您仍然想获得操作系统名称,那么您可以通过某种库来获得它(如果存在任何库,我不知道),或者您可以在其中定义带有版本号和版本名称硬编码的键值对,但是这绝对是一项繁忙的工作,可能不适合你。
【讨论】:
感谢您的回复。但是我不能得到我在问题中描述的版本名称,即 Ubuntu 16.04 之类的吗? @the_ultimate_developer 您可以使用上述代码获取操作系统版本号。我认为没有任何方法可以从 JS 获取版本名称,直到或除非您可能有一些库可以提供此名称或创建一个列表,您可以在其中定义跨版本号的版本名称,但这是一个忙碌的工作。 感谢您的信息!为你的努力点赞:)以上是关于如何在 Javascript 中获取 PC 中的操作系统版本的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 c# 或 jQuery 或 Javascript 获取客户端系统/PC 域名和 PC 名称
如何使用 Redux connect 中的操作对测试组件进行快照?