如何使用JavaScript找到操作系统名称和操作系统版本?


当前回答

https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUAData/platform

console.log (navigator.userAgentData.platform)

例如:macOS, Windows

警告:window.navigator.platform已弃用

其他回答

嘿,一个快速的解决方案,你可以考虑下面的库:UAPARSER - https://www.npmjs.com/package/ua-parser-js

例子:

<script type="text/javascript" src="ua-parser.min.js"></script>
<script type="text/javascript">

var parser = new UAParser();
console.log(parser.getOS()) // will log  {name: "", version:""}

你也可以通过npm安装这个库,然后像这样导入它:

import { UAParser } from 'ua-parser-js';
let parser = new UAParser();
parser.getOS();

这个库是一个基于JS的用户代理字符串解析器(window.navigator. JS)。userAgent是浏览器上的用户代理),所以你可以使用它获得其他细节,如浏览器,设备,引擎等,它也可以与node js一起工作。

如果你需要输入库:https://www.npmjs.com/package/@types/ua-parser-js

JavaScript可以访问window.navigator.platform——一个表示浏览器平台的字符串: https://developer.mozilla.org/en-US/docs/Web/API/NavigatorID/platform

使用它来提取您需要(并且可以)的任何细节。请注意,并不能保证客户端实际使用了该平台,因为这可以很容易地以多种方式进行修改。

试一试:

console.log (window.navigator.platform);

我创建了一个用于解析User Agent字符串的库,名为Voodoo。但是要注意,不应该用它来代替特征检测。

Voodoo所做的是解析userAgent字符串,该字符串在Navigator对象(window.navigator)中找到。并不是所有浏览器都会传递可靠的userAgent字符串,所以即使这是正常的方式,userAgent也不总是可信的。

如前所述,导航器。平台已弃用。我们应该使用导航器。但它仍然缺乏支持(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

使用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.");