如何使用JavaScript找到操作系统名称和操作系统版本?
当前回答
你可以使用这个javascript函数来检查用户的操作系统
function getOS() {
var userAgent = window.navigator.userAgent,
platform = window.navigator.platform,
macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],
windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],
iosPlatforms = ['iPhone', 'iPad', 'iPod'],
os = null;
if (macosPlatforms.indexOf(platform) !== -1) {
os = 'Mac OS';
} else if (iosPlatforms.indexOf(platform) !== -1) {
os = 'iOS';
} else if (windowsPlatforms.indexOf(platform) !== -1) {
os = 'Windows';
} else if (/Android/.test(userAgent)) {
os = 'Android';
} else if (!os && /Linux/.test(platform)) {
os = 'Linux';
}
return os;
}
alert(getOS());
其他回答
JavaScript可以访问window.navigator.platform——一个表示浏览器平台的字符串: https://developer.mozilla.org/en-US/docs/Web/API/NavigatorID/platform
使用它来提取您需要(并且可以)的任何细节。请注意,并不能保证客户端实际使用了该平台,因为这可以很容易地以多种方式进行修改。
试一试:
console.log (window.navigator.platform);
如前所述,导航器。平台已弃用。我们应该使用导航器。但它仍然缺乏支持(firefox, safari在2022年不支持它)。
注意导航器。userAgentData只适用于通过https兼容的浏览器。
下面是一个脚本,它将使用UserAgentData,并返回到旧的操作方式。
function get_platform() {
// 2022 way of detecting. Note : this userAgentData feature is available only in secure contexts (HTTPS)
if (typeof navigator.userAgentData !== 'undefined' && navigator.userAgentData != null) {
return navigator.userAgentData.platform;
}
// Deprecated but still works for most of the browser
if (typeof navigator.platform !== 'undefined') {
if (typeof navigator.userAgent !== 'undefined' && /android/.test(navigator.userAgent.toLowerCase())) {
// android device’s navigator.platform is often set as 'linux', so let’s use userAgent for them
return 'android';
}
return navigator.platform;
}
return 'unknown';
}
let platform = get_platform();
// examples of use
let isOSX = /mac/.test(platform.toLowerCase()); // Mac desktop
let isIOS = ['iphone', 'ipad', 'ipod'].indexOf(platform.toLowerCase()) !== -1; // Mac iOs
let isApple = isOSX || isIOS; // Apple device (desktop or iOS)
let isWindows = /win/.test(platform.toLowerCase()); // Windows
let isAndroid = /android/.test(platform.toLowerCase()); // Android
let isLinux = /linux/.test(platform.toLowerCase()); // Linux
如果您正在使用Electron创建网站或创建桌面应用程序,您可能需要获取客户端使用的操作系统的信息。在这种情况下,你可以使用全局属性window。navigator。 如果您使用console.log(navigator)在控制台中记录属性,您将看到包含浏览器、操作系统等信息的子属性的整个对象。
同样,如果你想创建一个本地NodeJS应用程序也是可以的!只需使用const os = require("os");;调用os模块。然后在控制台中记录常量。你会得到一个完整的对象,但如果你想看到平台的名称,你可以输入console.log(os.platform());,并确保在os后添加一对圆括号。平台作为平台在这里是一个功能!
希望这能有所帮助!
使用DetectOS.js。这是一个简单的JS定义,适用于没有依赖关系的流行操作系统和浏览器:
class DetectOS { constructor() { this.browser = this.searchString(this.dataBrowser()) this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) this.OS = this.searchString(this.dataOS()) } searchString(data) { for (let i = 0; i < data.length; i++) { let dataString = data[i].string, dataProp = data[i].prop this.versionSearchString = data[i].versionSearch || data[i].identity if (dataString) { if (dataString.indexOf(data[i].subString) !== -1) { return data[i].identity } } else if (dataProp) { return data[i].identity } } } searchVersion(dataString) { let index = dataString.indexOf(this.versionSearchString) if (index === -1) return return parseFloat(dataString.substring(index+this.versionSearchString.length + 1)) } dataBrowser() { return [ /*************** * Chrome ***************/ { string: navigator.userAgent, subString: "Chrome", identity: "Chrome" }, /*************** * Safari ***************/ { string: navigator.vendor, subString: "Apple", identity: "Safari", versionSearch: "Version" }, /*************** * For Older Opera (12.18-) ***************/ { prop: window.opera, identity: "Opera", versionSearch: "Version" }, /*************** * Internet Explorer 10 ***************/ { string: navigator.userAgent, subString: "MSIE", identity: "IE10", versionSearch: "MSIE" }, /*************** * Internet Explorer 11 ***************/ { string: navigator.userAgent, subString: "Trident", identity: "IE11", versionSearch: "rv" }, /*************** * Edge ***************/ { string: navigator.userAgent, subString: "Edge", identity: "Edge", versionSearch: "Edge" }, /*************** * Firefox ***************/ { string: navigator.userAgent, subString: "Firefox", identity: "Firefox" }, { string: navigator.userAgent, subString: "Gecko", identity: "Mozilla", versionSearch: "rv" }, /*************** * For Older Netscapes (4-) ***************/ { string: navigator.userAgent, subString: "Mozilla", identity: "Netscape", versionSearch: "Mozilla" }, /*************** * For Newer Netscapes (6+) ***************/ { string: navigator.userAgent, subString: "Netscape", identity: "Netscape" }, /*************** * Other Browsers ***************/ { string: navigator.userAgent, subString: "OmniWeb", versionSearch: "OmniWeb/", identity: "OmniWeb" }, { string: navigator.vendor, subString: "iCab", identity: "iCab" }, { string: navigator.vendor, subString: "KDE", identity: "Konqueror" }, { string: navigator.vendor, subString: "Camino", identity: "Camino" } ] } dataOS() { return [ { string: navigator.platform, subString: 'Win', identity: 'Windows' }, { string: navigator.platform, subString: 'Mac', identity: 'macOS' }, { string: navigator.userAgent, subString: 'iPhone', identity: 'iOS' }, { string: navigator.userAgent, subString: 'iPad', identity: 'iOS' }, { string: navigator.userAgent, subString: 'iPod', identity: 'iOS' }, { string: navigator.userAgent, subString: 'Android', identity: 'Android' }, { string: navigator.platform, subString: 'Linux', identity: 'Linux' } ] } } const Detect = new DetectOS() console.log("We know your browser – it's " + Detect.browser + " " + Detect.version); console.log("We know your OS – it's " + Detect.OS); console.log("We know everything about you.");
路德维希的解决方案太棒了。有几个修复(与操作系统无关,我不能把他的原始帖子作为评论,因为这太长了):
IE 11不再自称为MS IE。 IOS上的Chrome把自己伪装成Safari
他们是:
(function (window) {
{
/* test cases
alert(
'browserInfo result: OS: ' + browserInfo.os +' '+ browserInfo.osVersion + '\n'+
'Browser: ' + browserInfo.browser +' '+ browserInfo.browserVersion + '\n' +
'Mobile: ' + browserInfo.mobile + '\n' +
'Cookies: ' + browserInfo.cookies + '\n' +
'Screen Size: ' + browserInfo.screen
);
*/
var unknown = 'Unknown';
// screen
var screenSize = '';
if (screen.width) {
width = (screen.width) ? screen.width : '';
height = (screen.height) ? screen.height : '';
screenSize += '' + width + " x " + height;
}
//browser
var nVer = navigator.appVersion;
var nAgt = navigator.userAgent;
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);
}
}
// MSIE
else if ((verOffset = nAgt.indexOf('MSIE')) != -1) {
browser = 'Microsoft Internet Explorer';
version = nAgt.substring(verOffset + 5);
}
//IE 11 no longer identifies itself as MS IE, so trap it
//http://stackoverflow.com/questions/17907445/how-to-detect-ie11
else if ((browser == 'Netscape') && (nAgt.indexOf('Trident/') != -1)) {
browser = 'Microsoft Internet Explorer';
version = nAgt.substring(verOffset + 5);
if ((verOffset = nAgt.indexOf('rv:')) != -1) {
version = nAgt.substring(verOffset + 3);
}
}
// 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);
}
// Chrome on iPad identifies itself as Safari. Actual results do not match what Google claims
// at: https://developers.google.com/chrome/mobile/docs/user-agent?hl=ja
// No mention of chrome in the user agent string. However it does mention CriOS, which presumably
// can be keyed on to detect it.
if (nAgt.indexOf('CriOS') != -1) {
//Chrome on iPad spoofing Safari...correct it.
browser = 'Chrome';
//Don't believe there is a way to grab the accurate version number, so leaving that for now.
}
}
// Firefox
else if ((verOffset = nAgt.indexOf('Firefox')) != -1) {
browser = 'Firefox';
version = nAgt.substring(verOffset + 8);
}
// 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);
// cookie
var cookieEnabled = (navigator.cookieEnabled) ? true : false;
if (typeof navigator.cookieEnabled == 'undefined' && !cookieEnabled) {
document.cookie = 'testcookie';
cookieEnabled = (document.cookie.indexOf('testcookie') != -1) ? true : false;
}
// system
var os = unknown;
var clientStrings = [
{s:'Windows 3.11', r:/Win16/},
{s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/},
{s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/},
{s:'Windows 98', r:/(Windows 98|Win98)/},
{s:'Windows CE', r:/Windows CE/},
{s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/},
{s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/},
{s:'Windows Server 2003', r:/Windows NT 5.2/},
{s:'Windows Vista', r:/Windows NT 6.0/},
{s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/},
{s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/},
{s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/},
{s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},
{s:'Windows ME', r:/Windows ME/},
{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.browserInfo = {
screen: screenSize,
browser: browser,
browserVersion: version,
mobile: mobile,
os: os,
osVersion: osVersion,
cookies: cookieEnabled
};
}(this));