navigator对象是BOM核心,通过userAgent、platform及userAgentData等属性可判断设备类型与浏览器信息,但受隐私策略和UA伪造影响,需多属性结合以提升准确性。

navigator 对象是 BOM(Browser Object Model)中最常用的对象之一,它提供了当前浏览器和设备的大量信息。虽然不能 100% 精确识别所有设备或网络状态(受隐私策略、用户代理伪造、浏览器限制等影响),但结合多个属性可进行合理判断。
检测设备类型:移动端还是桌面端
主要依靠 navigator.userAgent 和 navigator.platform,现代更推荐用 navigator.userAgentData(需注意兼容性)。
-
userAgent 字符串匹配:检查是否含
Mobile、iPad、Android、iPhone等关键词 -
platform 属性辅助判断:如
navigator.platform返回"Win32"、"MacIntel"、"Linux arm64"等 -
推荐方式(兼顾兼容与现代):
function isMobile() { const ua = navigator.userAgent; return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua) || (navigator.userAgentData && navigator.userAgentData.mobile); }
识别浏览器类型与版本
navigator.userAgent 是传统方式,但易被修改;navigator.userAgentData(Chrome 101+、Edge 101+ 支持)更可靠且支持 getHighEntropyValues() 获取更多可信字段。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
基础 UA 解析示例(轻量级):
function getBrowser() { const ua = navigator.userAgent; if (/Edg\//i.test(ua)) return "Edge"; if (/Chrome\//i.test(ua) && !/Edg\//i.test(ua)) return "Chrome"; if (/Firefox\//i.test(ua)) return "Firefox"; if (/Safari\//i.test(ua) && /AppleWebKit/i.test(ua) && !/(Chrome|Edg|Firefox|OPR)/i.test(ua)) return "Safari"; if (/MSIE|Trident/i.test(ua)) return "IE"; return "Unknown"; } -
使用 userAgentData(需异步获取高熵值):
if (navigator.userAgentData) { navigator.userAgentData.getHighEntropyValues(['browserName', 'fullVersionList']) .then(uaData => { console.log(uaData.browserName, uaData.fullVersionList[0].version); }); }
获取网络连接状态与能力
网络信息主要来自 navigator.onLine 和 navigator.connection(Network Information API),后者可提供带宽、有效类型(4g、wifi)、是否节电等。
立即学习“Java免费学习笔记(深入)”;
-
在线状态监听(简单但粗略):
navigator.onLine只反映浏览器是否认为联网,不保证能访问服务器 -
获取真实网络能力(需检查兼容性):
if (navigator.connection) { const { effectiveType, downlink, rtt, saveData } = navigator.connection; console.log(`网络类型:${effectiveType}`); // e.g. "4g", "wifi" console.log(`预估下行带宽:${downlink} Mbps`); console.log(`节流模式:${saveData ? '开启' : '关闭'}`); // 监听变化 navigator.connection.addEventListener('change', () => { console.log('网络状态已更新'); }); } -
注意:部分属性(如
downlink)在非安全上下文(HTTP)中可能返回0或不可用
其他实用设备信息
还可通过组合属性获取屏幕尺寸、语言、硬件并发数等辅助信息,提升判断准确性:
-
语言偏好:
navigator.language或navigator.languages[0] -
硬件线程数:
navigator.hardwareConcurrency(常用于判断设备性能等级) -
是否为 WebView:检查
userAgent是否含WebView、,或对比 <code>navigator.standalone(iOS PWA) -
是否支持触控:
'ontouchstart' in window || navigator.maxTouchPoints > 0

















