通过navigator的userAgent检测浏览器版本以及平台
要通过navigator对象验证设备是 iOS 还是 Android,核心是利用(用户代理字符串)中包含的系统特征关键词进行判断。
·
要通过 navigator 对象验证设备是 iOS 还是 Android,核心是利用 navigator.userAgent(用户代理字符串)中包含的系统特征关键词进行判断
一、核心原理
不同系统的 userAgent 会包含固定特征:
- iOS 设备:包含
iPhone、iPad、iPod、iOS等关键词(且需排除 macOS 伪装的情况); - Android 设备:包含
Android关键词(需排除 Chrome 模拟器等非真实设备场景)。
二、完整判断函数
/**
* 判断设备系统类型
* @returns {String} "ios" | "android" | "other"
*/
function getOS() {
// 获取用户代理字符串并转为小写,避免大小写问题
const userAgent = navigator.userAgent.toLowerCase();
// 先判断 iOS(需排除 macOS 上的 Safari 伪装)
const isIOS = /iphone|ipad|ipod/.test(userAgent) && !/macintosh/.test(userAgent);
// 判断 Android(排除 Windows 模拟器等非真实设备)
const isAndroid = /android/.test(userAgent) && !/windows/.test(userAgent);
if (isIOS) {
return "ios";
} else if (isAndroid) {
return "android";
} else {
return "other"; // 桌面端、鸿蒙、Windows Phone 等
}
}
三、进阶:获取 iOS/Android 具体版本
如果需要进一步获取系统版本(如 iOS 17、Android 14),可扩展函数:
function getOSWithVersion() {
const userAgent = navigator.userAgent.toLowerCase();
let os = "other";
let version = "unknown";
// 匹配 iOS 版本(如 "os 17_0_3 like mac os x" 或 "iphone os 16_1")
const iosMatch = userAgent.match(/os (\d+[_|\.]\d+(_|\.)?\d*)/);
if (/iphone|ipad|ipod/.test(userAgent) && !/macintosh/.test(userAgent)) {
os = "ios";
version = iosMatch ? iosMatch[1].replace(/_/g, ".") : "unknown";
}
// 匹配 Android 版本(如 "android 14" 或 "android 13; build/...")
const androidMatch = userAgent.match(/android (\d+(\.\d+)?)/);
if (/android/.test(userAgent) && !/windows/.test(userAgent)) {
os = "android";
version = androidMatch ? androidMatch[1] : "unknown";
}
return { os, version };
}
四、使用示例
// 基础判断
const osType = getOS();
if (osType === "ios") {
console.log("当前是 iOS 设备");
// 执行 iOS 专属逻辑(如适配刘海屏、唤起原生分享)
} else if (osType === "android") {
console.log("当前是 Android 设备");
// 执行 Android 专属逻辑(如处理返回键、适配状态栏)
} else {
console.log("非移动设备或其他系统");
}
// 获取版本信息
const { os, version } = getOSWithVersion();
console.log(`系统类型:${os},版本:${version}`);
五、关键注意事项
- userAgent 可能被修改:部分浏览器(如 Chrome 移动端)可伪装 UA,仅能作为参考,不能作为唯一判断依据;
- 鸿蒙系统兼容:鸿蒙设备默认会伪装成 Android 的 UA(包含
Android关键词),若需区分鸿蒙,需额外检测harmonyos关键词:
const isHarmonyOS = /harmonyos/.test(userAgent);
3.桌面端模拟器:Chrome 开发者工具的设备模拟会添加 Android/iOS UA,需结合 navigator.platform 辅助判断:
// 真实移动端的 platform 特征
const isRealMobile = /iphone|ipad|ipod|android|linux/.test(navigator.platform.toLowerCase());
4.iOS 13+ 隐私限制:iOS 13 及以上版本中,userAgent 可能隐藏部分细节,核心关键词(iPhone/iPad)仍保留,不影响基础判断。
六、扩展:结合 navigator.platform 增强准确性
function getOSAccurate() {
const platform = navigator.platform.toLowerCase();
const userAgent = navigator.userAgent.toLowerCase();
// iOS 设备的 platform 为 "iphone" | "ipad" | "ipod"
if (/iphone|ipad|ipod/.test(platform)) {
return "ios";
}
// Android 设备的 platform 多为 "linux"(Android 基于 Linux 内核)
else if (/linux/.test(platform) && /android/.test(userAgent)) {
return "android";
}
return "other";
}
简易版本,检测是否为移动端
!(function () {
const userAgent = navigator.userAgent;
// 验证是否为Android或iPone
const android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/);
const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/);
// 如果是Android或iPone,则跳转到移动端站点
if (android || iphone) {
window.location.href = "https://baidu.com";
}
})();
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)