原生 JS 判断设备类型方法
可通过以下两种主流方案实现设备类型检测:
方案一:基于 navigator.userAgent 的 User Agent 检测
实现代码:
javascript
function isMobileDevice() {
const ua = navigator.userAgent || navigator.vendor || window.opera;
const mobileRegex = /android|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile|windows phone|phone|webos|kindle|tablet/i;
return mobileRegex.test(ua.toLowerCase());
}
逻辑说明:
- 通过
navigator.userAgent获取浏览器标识字符串。 - 正则表达式匹配移动端关键词(如
android、iphone、mobile等)。 - 返回
true表示移动端,false表示 PC 端。
!!!接下来是方案二,方案二不太建议使用,因为三折叠可能不止768
方案二:结合屏幕分辨率与 User Agent 检测(增强版)
实现代码:
javascript
function detectDeviceType() {
const ua = navigator.userAgent.toLowerCase();
const isMobileUA = /mobile|android|iphone|ipad|ipod|windows phone|phone|webos/i.test(ua);
const isSmallScreen = window.innerWidth <= 768;
return isMobileUA || isSmallScreen ? 'mobile' : 'pc';
}
逻辑说明:
- 同时检测 User Agent 和屏幕宽度(移动端通常小于等于 768px)。
- 双条件验证减少误判(如 iPad 可能被识别为 PC 端)。
注意事项
- User Agent 的局限性:部分浏览器可能伪造 UA(如 Chrome 移动端模拟 PC 模式)。
- 平板设备处理 :若需区分平板与手机,需额外增加关键词(如
ipad、tablet)。 - 动态响应式场景:建议结合 CSS 媒体查询实现布局适配,而非仅依赖 JS 检测。
代码调用示例
arduino
if (isMobileDevice()) {
console.log("当前设备为手机/平板");
} else {
console.log("当前设备为 PC");
}
1. 基于 navigator.userAgent 的插件方案
推荐插件 :mobile-detect.js、platform.js
实现逻辑:
- 插件通过解析
navigator.userAgent中的设备标识符(如Android、iPhone、Windows等)实现设备判断。 - 支持更细分的设备类型检测(如平板、手机、PC)。
代码示例(以 mobile-detect.js 为例) :
javascript
// 引入插件
import MobileDetect from 'mobile-detect';
// 初始化检测器
const md = new MobileDetect(navigator.userAgent);
// 判断设备类型
if (md.mobile()) {
console.log("移动端登录设备(手机/平板)");
} else if (md.tablet()) {
console.log("平板设备");
} else {
console.log("PC 端设备");
}
2. 结合屏幕分辨率的增强方案
推荐插件 :react-device-detect(适用于 React 项目)
实现逻辑:
- 通过
User Agent和屏幕宽度综合判断设备类型,减少误判。 - 支持动态响应式场景(如横竖屏切换)。
代码示例:
javascript
import { isMobile } from 'react-device-detect';
if (isMobile) {
console.log("移动端登录设备");
} else {
console.log("PC 端登录设备");
}
注意事项
-
User Agent 的局限性:
- 浏览器可能伪造 UA(如 Chrome 的"桌面模式"模拟 PC 端)。
- 建议结合后端设备指纹(如 IP、设备型号)增强准确性。
-
平板设备的特殊处理:
- 部分平板(如 iPad)可能被识别为 PC 端,需额外判断
navigator.platform(如MacIntel表示 iPad)。
- 部分平板(如 iPad)可能被识别为 PC 端,需额外判断
-
动态设备切换场景:
- 监听
window.resize事件,更新设备状态(如横竖屏切换导致屏幕宽度变化)。
- 监听
推荐插件对比
| 插件 | 适用场景 | 优点 |
|---|---|---|
mobile-detect.js |
需要细分设备类型(手机/平板) | 支持 5000+ 设备类型识别 |
react-device-detect |
React 项目 | 集成简单,支持响应式设计 |
platform.js |
轻量级检测(仅区分 PC/移动端) | 体积小(< 5KB) |