2020-11-30 10:48:05
在JavaScript中获取设备信息需区分浏览器环境和Node.js环境,两者实现方式不同,且需注意兼容性、隐私安全等问题。以下是具体实现方法:
一、浏览器环境:使用navigator对象navigator对象提供了浏览器和操作系统的基本信息,但需注意不同浏览器的实现差异。

基础信息获取:
// 用户代理字符串(包含浏览器、操作系统等信息)const userAgent = navigator.userAgent;console.log("User Agent:", userAgent);// 平台信息(如"Win32"、"Linux x86_64")const platform = navigator.platform;console.log("Platform:", platform);// 语言设置const language = navigator.language || navigator.userLanguage;console.log("Language:", language);// 触摸支持检测(移动设备常用)const touchEnabled = ('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0);console.log("Touch Enabled:", touchEnabled);User Agent解析:直接使用userAgent字符串较复杂,可通过正则表达式或第三方库(如bowser)解析浏览器类型、版本等信息。
function getBrowserInfo() { const ua = navigator.userAgent; let tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=/))/?s*(d+)/i) || []; if (/trident/i.test(M[1])) { tem = /brv[ :]+(d+)/g.exec(ua) || []; return 'IE ' + (tem[1] || ''); } if (M[1] === 'Chrome') { tem = ua.match(/b(OPR|Edge)/(d+)/); if (tem) return tem.slice(1).join(' ').replace('OPR', 'Opera'); } M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?']; if ((tem = ua.match(/version/(d+)/i))) { M.splice(1, 1, tem[1]); } return M.join(' ');}console.log("Browser Info:", getBrowserInfo());移动设备判断:结合userAgent关键词和触摸支持特性,提高准确性。
function isMobileDevice() { if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) { return true; // 粗略判断 } if ('ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0) { return true; // 结合触摸支持 } return false;}console.log("Is Mobile Device:", isMobileDevice());Node.js中需通过模块获取系统信息,无navigator对象。

浏览器环境扩展:
使用Web APIs(如Battery API、Network Information API)获取电池、网络状态等,但需注意兼容性和权限。
第三方库(如bowser、Modernizr)可简化解析和特性检测。
Node.js环境扩展:
使用systeminformation等npm包获取更详细的硬件信息(如磁盘、网络接口),但可能需系统依赖。
兼容性处理:
特性检测:使用前检查API是否存在(如if ('geolocation' in navigator))。
Polyfill:为旧浏览器提供新API支持(如es5-shim)。
渐进增强:基础功能全浏览器支持,高级特性逐步增强。
错误处理:捕获API调用失败或权限拒绝等异常。
隐私与安全:
避免收集敏感信息(如设备唯一标识符)。
遵循隐私政策(如GDPR),减少指纹追踪风险。
userAgent可能被用户或浏览器修改,不可完全依赖。
