navigator 是浏览器 BOM 里面的核心内置对象,它的作用是获取当前浏览器环境相关信息,包含浏览器名称版本操作系统语言是否启用 cookie 硬件并发数网络状态等数据,JS 代码可以直接调用 window.navigator 访问,window 可以省略,直接写 navigator,它是只读对象,大部分属性不能手动修改,经常用于浏览器兼容判断设备识别网络检测等业务场景,很多前端新手容易混淆 navigator 和 locationhistory,navigator 专注浏览器环境信息,location 负责地址栏,history 负责历史跳转,三者同属于 BOM 体系。之所以这个对象非常重要,是前端做适配、UA 识别、权限判断、PWA、设备能力检测都会用到,但是现代浏览器出于隐私安全,很多旧属性已经废弃,并且 UA 字符串可以被篡改,不能完全信任 navigator 返回的数据。
一 基础定义
navigator 隶属于 BOM 浏览器对象模型,挂载在 window 全局对象下
访问方式
console.log(window.navigator)
console.log(navigator)
特点
只读对象
不同浏览器属性支持程度存在差异
部分属性受浏览器隐私策略限制,存在空值或者伪装值
UA 可以被用户或者插件修改,不可作为安全校验依据
二 核心常用属性对照表
| 属性 | 说明 | 典型用途 |
|---|---|---|
| userAgent | UA 字符串,包含浏览器系统版本信息 | 识别手机 PC 端浏览器类型 |
| platform | 操作系统平台,比如 Win32 MacIntel | 判断操作系统 |
| language | 浏览器首选语言,zh-CN en-US | 国际化多语言页面 |
| languages | 浏览器支持语言数组 | 多语言优先级判断 |
| cookieEnabled | 布尔值,是否开启 cookie | 检测 cookie 是否可用 |
| hardwareConcurrency | CPU 核心线程数量 | WebWorker 并发优化 |
| onLine | 布尔值,浏览器是否联网 | 断网离线提示 |
| webdriver | 布尔值,是否自动化脚本控制 | 识别自动化爬虫 |
| maxTouchPoints | 最大支持触控点数 | 触屏设备识别 |
三 常用方法与 API
1 navigator.clipboard 剪贴板 API,读写系统剪贴板,需要安全上下文 HTTPS 或者
2 navigator.geolocation 地理定位 API,获取经纬度,需要用户授权
3 navigator.mediaDevices 媒体设备,调用摄像头麦克风
4 navigator.serviceWorker PWA 服务 worker 注册
5 navigator.sendBeacon 异步上报数据,页面关闭也可以保证请求发送,埋点上报高频使用
6 navigator.vibrate 震动 API,移动设备触发震动
四 重点 API 代码示例
UA 识别示例
const ua = navigator.userAgent
const isMobile = /Android|iPhone|iPad/i.test(ua)
联网状态检测
console.log(navigator.onLine)
sendBeacon 埋点上报
navigator.sendBeacon('/log', JSON.stringify(data))
五 重要注意事项
1 隐私限制 现代浏览器出于隐私保护,不再暴露完整精确系统版本,UA 会做冻结处理,旧版 navigator.appName appVersion 已经废弃,不推荐继续使用
2 安全上下文 剪贴板 定位 摄像头这类高级 API,必须 HTTPS 或者本地localhost,http 环境无法调用
3 权限机制 geolocation mediaDevices 调用时浏览器会弹出授权弹窗,用户拒绝之后 API 调用失败
4 UA 可篡改 用户可以通过插件修改 userAgent,所以不能拿 UA 做安全鉴权,只适合做适配判断
5 跨浏览器差异 部分属性在 Safari Chrome Firefox 支持不一样,正式项目需要做兼容性判断
六 常见误区
误区一 navigator 可以修改浏览器信息,它是只读对象,不能赋值修改
误区二 只要读取 userAgent 就可以精准识别设备,UA 可伪造,存在误差
误区三 navigator 属于 DOM 对象,它属于 BOM,不属于 DOM 文档对象模型
相关 FAQ / 常见问题
问题 1 navigator 对象属于 DOM 还是 BOM
回答 navigator 对象属于 BOM 浏览器对象模型,不属于 DOM,它用来读取浏览器环境信息,window 是 BOM 顶层对象,navigator 挂载在 window 下面。
问题 2 navigator.userAgent 为什么现在信息越来越少
回答 现代浏览器隐私优化,UA 冻结,不再暴露精确系统和浏览器小版本,防止指纹追踪,旧的识别方案需要升级。
问题 3 navigator.onLine 一定准确吗
回答 navigator.onLine 只代表浏览器网络连接状态,有可能出现假在线,也就是网络连通但是外网不通,业务不能只依靠这个属性判断,最好配合接口请求验证。
问题 4 navigator.geolocation 为什么调用失败
回答 大概率不是 HTTPS 安全上下文,或者用户拒绝定位授权,还有部分设备浏览器禁用定位功能,都会造成 navigator.geolocation 调用失败。
免责声明
本文为前端 navigator 对象技术科普,不同浏览器版本对 navigator 属性 API 支持会持续变更,部分 API 受浏览器安全策略权限策略限制,代码示例仅学习参考,生产项目需要增加兼容降级处理,本文不保证所有浏览器全部兼容,因业务开发使用造成相关问题本文不承担责任。

