navigator 对象详解 浏览器内置对象完整解析

描述:
navigator 对象详解 浏览器内置对象完整解析
精选回答

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 可以被用户或者插件修改,不可作为安全校验依据

二 核心常用属性对照表

属性说明典型用途
userAgentUA 字符串,包含浏览器系统版本信息识别手机 PC 端浏览器类型
platform操作系统平台,比如 Win32 MacIntel判断操作系统
language浏览器首选语言,zh-CN en-US国际化多语言页面
languages浏览器支持语言数组多语言优先级判断
cookieEnabled布尔值,是否开启 cookie检测 cookie 是否可用
hardwareConcurrencyCPU 核心线程数量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 受浏览器安全策略权限策略限制,代码示例仅学习参考,生产项目需要增加兼容降级处理,本文不保证所有浏览器全部兼容,因业务开发使用造成相关问题本文不承担责任。

今日大家都在搜的词: