javascript - 使用 javascript 确定操作系统
问题描述
我正在寻找一种在 Javascript 中获取客户端操作系统的通用方法。许多记录在案的解决方案都使用用户代理,我遇到过类似的堆栈溢出问题/答案,这些问题已经过时。下面提供了一个示例函数,但我想知道是否有更全面的版本符合以下准则:
- 所有现代且广泛使用的操作系统都应该有一个版本,例如,而不仅仅是Windows,有 Windows 10或Windows 7
- 旧的和大量冗余的操作系统可以组合在一起,例如Windows 98,Windows Vista可能只是Windows
- 移动操作系统也需要尽可能包含在版本中,例如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/的示例
推荐阅读
- java - 强制 pureconfig 使用 -dconfig.file application.conf 文件而不是资源 application.conf
- html - 如何向内转 SVG 文本
- github - 如何通过 GitHub 存储库的 Web 界面防止提交
- git - github 会自动添加在 sublime 中创建的文件吗?
- javascript - 当另一个字段发生变化时更新一个字段 - Vue
- range - 尝试在 MIPS 中运行此代码,我收到一条错误消息,提示“0x00400090 处的运行时异常:地址超出范围 0x00000008”
- apache-kafka - Confluent Platform:Confluent Platform 和 Apache Kafka 版本之间的版本对齐
- python - 如何从字符串列表中检索部分匹配项
- python - 如何使用 Python 从 KML 服务器获取数据?
- python-3.x - GitHub Actions:无法使用 GitHub Actions 找到输入文件