最常用且可靠的方式是组合判断:先用 navigator.userAgent 匹配 Mobile、Android、iPhone 等关键词,再结合 screen.width ≤ 768 和 touch 支持性综合判定,兼顾兼容性与准确性。

最常用且可靠的方式是通过 navigator.userAgent 字符串匹配移动端关键词,结合 screen.width 或 matchMedia 做辅助判断。单纯依赖 UA 不够严谨,但对大多数业务场景已足够实用。
用 userAgent 检测常见移动设备标识
浏览器的 navigator.userAgent 通常包含设备类型线索,比如 Mobile、Android、iOS、、<code>iPad 等。注意 iPad 默认 UA 可能不带 Mobile,需单独处理。
- 匹配
/Mobile|Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i - 特别留意:iOS 13+ 的 iPad UA 中不含
Mobile,但含iPad;部分桌面 Safari 也可能含iPad,需结合maxTouchPoints > 0或屏幕尺寸进一步确认 - 避免只检测
Android—— 桌面版 Chrome 也可能带该字段(如 Chrome on Android TV)
用 screen.width 或 window.innerWidth 辅助判断
小屏幕不等于移动端(如缩放的桌面浏览器),但大屏基本可排除手机。常配合 UA 使用,提升准确率。
- 若
screen.width <= 768且 UA 匹配移动关键词,大概率是手机 -
window.innerWidth更反映当前视口宽度,适合响应式场景,但受缩放影响 - 注意:折叠屏、横竖屏切换时数值会变,不宜单独作为判定依据
用 matchMedia 检测触控与窄屏媒体查询
现代方式,更语义化,适合渐进增强逻辑:
立即学习“Java免费学习笔记(深入)”;
-
window.matchMedia('(max-width: 768px)').matches判断窄屏 -
window.matchMedia('(hover: none) and (pointer: coarse)').matches表示主要输入方式为触摸(移动端典型特征) - 该方法不依赖 UA,更健壮,但 IE 不支持,需降级处理
推荐组合判断函数
兼顾兼容性与准确性,适用于多数项目:
(示例代码,可直接使用)function isMobile() {
const ua = navigator.userAgent;
const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0;
const isSmallScreen = screen.width <= 768;
const hasMobileUa = /Mobile|Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua);
return hasMobileUa || (isTouchDevice && isSmallScreen);
}
这个函数避开单一依赖,覆盖主流情况,也便于后续扩展逻辑(如区分平板和手机)。


















