2021-09-13 08:27:44
使用JavaScript检测设备类型主要通过解析navigator.userAgent实现,结合正则表达式或开源库(如ua-parser-js)可提高准确性。以下是具体方法及注意事项:
一、基础检测方法获取User Agent并转为小写
const userAgent = navigator.userAgent.toLowerCase();统一转为小写便于后续正则匹配。
判断移动设备
const isMobile = /iphone|ipad|ipod|android/.test(userAgent);if (isMobile) { console.log("移动设备");} else { console.log("桌面设备");}通过正则匹配iphone、ipad、ipod或android关键词。
区分Android手机与平板
const isAndroid = /android/.test(userAgent);const isTablet = /ipad|android/.test(userAgent) && !/mobile/.test(userAgent);if (isAndroid && !isTablet) { console.log("Android手机");} else if (isTablet) { console.log("平板");}平板需同时满足:包含ipad或android,且不包含mobile。
推荐使用ua-parser-js库,可自动解析User Agent并返回设备类型、操作系统等信息:
// 引入库(需通过npm安装或CDN引入)const UAParser = require('ua-parser-js');const parser = new UAParser();const result = parser.setUA(navigator.userAgent).getResult();// 输出结果console.log(result.device.type); // "mobile"/"tablet"/"desktop"console.log(result.os.name); // "Android"/"iOS"/"Windows"console.log(result.browser.name); // "Chrome"/"Safari"优势:
CSS Media Queries通过屏幕尺寸判断设备类型,适用于响应式布局:
@media (max-width: 768px) { body { font-size: 14px; } /* 移动设备样式 */}@media (min-width: 769px) { body { font-size: 16px; } /* 桌面设备样式 */}JavaScript屏幕尺寸检测
const screenWidth = window.screen.width;if (screenWidth < 768) { console.log("移动设备");} else { console.log("桌面设备");}局限性:屏幕尺寸可被用户修改,且部分桌面设备屏幕较小。
User Agent的不可靠性:用户或浏览器可能修改User Agent,导致误判。避免将其用于关键业务逻辑(如支付验证)。
正则表达式维护成本:不同浏览器和设备的User Agent格式差异大,需定期更新正则表达式。
综合判断更可靠:结合User Agent、屏幕尺寸和Media Queries可提高准确性。例如:
const isMobile = /iphone|ipod|android/.test(userAgent.toLowerCase()) || window.screen.width < 768;