使用 javascript 确定 OS
Determine OS using javascript
我正在 Javascript 中寻找获取客户端操作系统的通用方法。许多记录在案的解决方案都使用用户代理,我在过时的堆栈溢出上遇到过类似的 questions/answers。下面提供了一个示例函数,但我想知道是否有更全面的版本满足以下准则:
- 所有现代和广泛使用的 OS 都应该有一个版本,例如而不只是 Windows,有 Windows 10 或 Windows 7
- 旧的和大部分冗余的 OSes 可以组合在一起,例如Windows 98, Windows Vista 可能显示为 Windows
- 移动 OSes 也需要尽可能包含在版本中,例如Android 7.0
- 代码不要太长,目的是为了区分目前最流行的系统。
下面的示例是在没有考虑太多的情况下组合在一起的,我正在寻找它的更好版本
function getOS() {
var osStr;
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("windows xp") !== -1) {
osStr = "WindowsXP";
} else if (ua.indexOf("windows nt 6.1") !== -1) {
osStr = "Windows7";
} else if (ua.indexOf("windows nt 10.0") !== -1) {
osStr = "Windows10";
} else if (ua.indexOf("iemobile") !== -1 || ua.indexOf("windows phone") !== -1) {
osStr = "WindowsMobile";
} else if (ua.indexOf("windows") !== -1) {
osStr = "Windows";
} else if (ua.indexOf("ipad") !== -1) {
osStr = "ipad";
} else if (ua.indexOf("ipod") !== -1) {
osStr = "iTouch)";
} else if (ua.indexOf("iphone") !== -1) {
osStr = "iPhone)";
} else if (ua.indexOf("cros") !== -1) {
osStr = "ChromeOS";
} else if (ua.indexOf("android") !== -1) {
osStr = "Android";
} else if (ua.indexOf("blackberry") !== -1) {
osStr = "Blackberry";
} else if (ua.indexOf("palm") !== -1) {
osStr = "PalmOS";
} else if (ua.indexOf("kindle") !== -1) {
osStr = "Kindle";
} else if (ua.indexOf("ubuntu") !== -1) {
osStr = "Ubuntu";
} else if (ua.indexOf("linux") !== -1) {
osStr = "Linux";
} else if (ua.indexOf("nix") !== -1) {
osStr = "UNIX";
} else {
osStr = "Unknown";
}
return osStr;
}
有很多不同的用户代理字符串请参阅 http://www.user-agents.org/
筛选所有内容是不切实际的。根据您的用例,过滤掉您关心的那些会更有益。
但是,您可以使用一些 API,它们已经为您完成了艰苦的工作
https://developers.whatismybrowser.com/api/features/user-agent-parse 是一个很棒的工具,可以为您解析用户代理字符串
这是一个更全面的列表,每个列表都有示例
https://www.whatsmyua.info/
希望将 OS 与用户代理组合成一个字符串,https://github.com/faisalman/ua-parser-js 的 UAParser 库(通过上面的答案找到)对两者都适用。该库目前是最新的,看起来维护得很好。它的缩小版本是 19KB。创建了一个函数
function getPlatform() {
var uap = UAParser(navigator.userAgent);
var osVersion = uap.os.version;
if (osVersion == null) {
osVersion = "";
}
var browserVersion = uap.browser.major;
if (browserVersion == null) {
browserVersion = "";
}
var platform = uap.os.name + osVersion + "_" + uap.browser.name + browserVersion;
platform = platform.replace(/\s/g, '');
return platform;
}
调用时 returns 无空格字符串 OS_UA 作为 URL 的一部分从客户端转发到服务器。
我正在 Javascript 中寻找获取客户端操作系统的通用方法。许多记录在案的解决方案都使用用户代理,我在过时的堆栈溢出上遇到过类似的 questions/answers。下面提供了一个示例函数,但我想知道是否有更全面的版本满足以下准则:
- 所有现代和广泛使用的 OS 都应该有一个版本,例如而不只是 Windows,有 Windows 10 或 Windows 7
- 旧的和大部分冗余的 OSes 可以组合在一起,例如Windows 98, Windows Vista 可能显示为 Windows
- 移动 OSes 也需要尽可能包含在版本中,例如Android 7.0
- 代码不要太长,目的是为了区分目前最流行的系统。
下面的示例是在没有考虑太多的情况下组合在一起的,我正在寻找它的更好版本
function getOS() {
var osStr;
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("windows xp") !== -1) {
osStr = "WindowsXP";
} else if (ua.indexOf("windows nt 6.1") !== -1) {
osStr = "Windows7";
} else if (ua.indexOf("windows nt 10.0") !== -1) {
osStr = "Windows10";
} else if (ua.indexOf("iemobile") !== -1 || ua.indexOf("windows phone") !== -1) {
osStr = "WindowsMobile";
} else if (ua.indexOf("windows") !== -1) {
osStr = "Windows";
} else if (ua.indexOf("ipad") !== -1) {
osStr = "ipad";
} else if (ua.indexOf("ipod") !== -1) {
osStr = "iTouch)";
} else if (ua.indexOf("iphone") !== -1) {
osStr = "iPhone)";
} else if (ua.indexOf("cros") !== -1) {
osStr = "ChromeOS";
} else if (ua.indexOf("android") !== -1) {
osStr = "Android";
} else if (ua.indexOf("blackberry") !== -1) {
osStr = "Blackberry";
} else if (ua.indexOf("palm") !== -1) {
osStr = "PalmOS";
} else if (ua.indexOf("kindle") !== -1) {
osStr = "Kindle";
} else if (ua.indexOf("ubuntu") !== -1) {
osStr = "Ubuntu";
} else if (ua.indexOf("linux") !== -1) {
osStr = "Linux";
} else if (ua.indexOf("nix") !== -1) {
osStr = "UNIX";
} else {
osStr = "Unknown";
}
return osStr;
}
有很多不同的用户代理字符串请参阅 http://www.user-agents.org/
筛选所有内容是不切实际的。根据您的用例,过滤掉您关心的那些会更有益。
但是,您可以使用一些 API,它们已经为您完成了艰苦的工作 https://developers.whatismybrowser.com/api/features/user-agent-parse 是一个很棒的工具,可以为您解析用户代理字符串
这是一个更全面的列表,每个列表都有示例 https://www.whatsmyua.info/
希望将 OS 与用户代理组合成一个字符串,https://github.com/faisalman/ua-parser-js 的 UAParser 库(通过上面的答案找到)对两者都适用。该库目前是最新的,看起来维护得很好。它的缩小版本是 19KB。创建了一个函数
function getPlatform() {
var uap = UAParser(navigator.userAgent);
var osVersion = uap.os.version;
if (osVersion == null) {
osVersion = "";
}
var browserVersion = uap.browser.major;
if (browserVersion == null) {
browserVersion = "";
}
var platform = uap.os.name + osVersion + "_" + uap.browser.name + browserVersion;
platform = platform.replace(/\s/g, '');
return platform;
}
调用时 returns 无空格字符串 OS_UA 作为 URL 的一部分从客户端转发到服务器。