热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

前端获取操作系统、操作系统版本

前端获取操作系统、操作系统版本在做埋点的过程中,遇到要上传操作系统和操作系统版本的需求,如下通过navigator.userAgent获取首先将操作系统确定为如下映射:ALL_OS

前端获取操作系统、操作系统版本

在做埋点的过程中,遇到要上传操作系统和操作系统版本的需求,如下

image


通过navigator.userAgent获取

首先将操作系统确定为如下映射:

ALL_OS = {
WINDOWS: 'windows',
WINDOWSPHONE: 'windows phone',
IPHONE: 'iphone',
IPAD: 'ipad',
MAC: 'mac',
ANDROID: 'android',
OTHERS: 'others',
}


获取当前操作系统

/** 获取当前操作系统 */
export const getOS = () => {
let os = ALL_OS.OTHERS
const userAgent = navigator.userAgent
if (userAgent.includes('Windows NT')) {
os = ALL_OS.WINDOWS
}
if (userAgent.includes('Mac')) {
if (userAgent.includes('iPhone')) {
os = ALL_OS.IPHONE
} else if (userAgent.includes('iPad')) {
os = ALL_OS.IPAD
} else {
os = ALL_OS.MAC
}
}
if (userAgent.includes('Android')) {
os = ALL_OS.ANDROID
}
return os
}



获取操作系统版本

/** 获取系统版本 */
export const getOSVersion = () => {
const os = getOS()
let osVersion = ALL_OS.OTHERS
const userAgent = navigator.userAgent
if (os === ALL_OS.IPHONE) {
osVersion = userAgent.slice(userAgent.indexOf(';') + 2, userAgent.indexOf(')'))
return osVersion
}
if (os === ALL_OS.IPAD) {
osVersion = userAgent.slice(userAgent.indexOf(';') + 2, userAgent.indexOf(')'))
return osVersion
}
if (os === ALL_OS.WINDOWS) {
osVersion = userAgent.slice(userAgent.indexOf('(') + 1, userAgent.indexOf(';'))
return osVersion
}
if (os === ALL_OS.MAC) {
// todo
}
if (os === ALL_OS.ANDROID) {
const middle = userAgent.slice(userAgent.indexOf(';') + 2, userAgent.indexOf(')'))
osVersion = middle.slice(0, middle.indexOf(';'))
return osVersion
}
return osVersion
}



推荐阅读
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 易飞扬宣布推出新型低成本100G OTU4光模块,以满足DPI市场的需求。新产品包括100G CFP2 LR4 10KM和100G OTU4 QSFP28 LR4光模块,具备低功耗和高性能特点。 ... [详细]
  • 京东云图片上传注册指南
    本文详细介绍了如何在京东云平台完成账号注册并实现图片上传功能,涵盖从注册到配置的完整流程。 ... [详细]
  • 创建项目:Visual Studio Online 入门指南
    本文介绍如何使用微软的 Visual Studio Online(VSO)创建和管理开发项目。作为一款基于云计算的开发平台,VSO 提供了丰富的工具和服务,简化了项目的配置和部署流程。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • 使用 GitHub、JSDelivr、PicGo 和 Typora 构建高效的图床解决方案
    本文详细介绍了如何利用 GitHub 仓库、JSDelivr CDN、PicGo 图床工具和 Typora 编辑器,搭建一个高效且免费的图床系统。通过此方案,用户可以轻松管理和上传图片,并在 Markdown 文档中快速插入高质量的图片链接。 ... [详细]
  • 本文详细介绍了在 Windows 2000 系统中启用 TELNET 服务时需要注意的 NTLM 配置问题,帮助用户解决常见的身份验证失败错误。 ... [详细]
  • 本文详细介绍了 Flink 和 YARN 的交互机制。YARN 是 Hadoop 生态系统中的资源管理组件,类似于 Spark on YARN 的配置方式。我们将基于官方文档,深入探讨如何在 YARN 上部署和运行 Flink 任务。 ... [详细]
  • 本文介绍了一种适用于小型创业公司的小规模每日数据备份及健康检查的自动化解决方案。通过简单的Shell脚本实现本地数据库的每日全量备份,并将备份文件上传至中心备份服务器。同时,编写了自动检测脚本来确保备份的完整性和及时性,一旦发现异常,会通过邮件和短信通知相关人员。 ... [详细]
  • Hybrid 应用的后台接口与管理界面优化
    本文探讨了如何通过优化 Hybrid 应用的后台接口和管理界面,提升用户体验。特别是在首次加载 H5 页面时,为了减少用户等待时间和流量消耗,介绍了离线资源包的管理和分发机制。 ... [详细]
  • 解决FCKeditor应用主题后上传问题及优化配置
    本文介绍了在Freetextbox收费后选择FCKeditor作为替代方案时遇到的上传问题及其解决方案。通过调整配置文件和调试工具,最终解决了上传失败的问题,并对相关配置进行了优化。 ... [详细]
author-avatar
霸气的饭桶丶_130
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有