navigator 对象

204 阅读6分钟

属性和方法

属性/方法说明
activeVrDisplays返回数组,包含 ispresenting 属性为 true 的 VRDisplay 实例
appCodeName即使在非 Mozilla浏览器中也会返回 "Mozilla"
appName浏览器全名
appVersion浏览器版本。通常与实际的浏览器版本不一致
battery返回暴露 Battery Status API 的 BatteryManager 对象
buildId浏览器的构建编号
connection返回暴露 Network Information API的 NetworkInformation 对象
cookieEnabled返回布尔值,表示是否启用了 cookie
credentials返回暴露 Credentials Management API的 CredentialsContainer 对象
deviceMemory返回单位为 GB的设备内存容量
doNotTrack返回用户的“不跟踪”(do-not-track)设置
geolocation返回暴露 Geolocation API的 Geolocation 对象
getVRDisplays()返回数组,包含可用的每个 VRDisplay 实例
getUserMedia()返回与可用媒体设备硬件关联的流
hardwareConcurrency返回设备的处理器核心数量
javaEnabled返回布尔值,表示浏览器是否启用了 Java
language返回浏览器的主语言
languages返回浏览器偏好的语言数组
locks返回暴露 Web Locks API 的 LockManager 对象
mediaCapabilities返回暴露 Media Capabilities API 的 MediaCapabilities 对象
mediaDevices返回可用的媒体设备
maxTouchPoints返回设备触摸屏支持的最大触点数
mimeTypes返回浏览器中注册的 MIME 类型数组
onLine返回布尔值,表示浏览器是否联网
oscpu返回浏览器运行设备的操作系统和(或)CPU
permissions返回暴露 Permissions API的 Permissions 对象
platform返回浏览器运行的系统平台
plugins返回浏览器安装的插件数组。在 IE 中,这个数组包含页面中所有 元素
product返回产品名称(通常是 "Gecko" )
productSub返回产品的额外信息(通常是 Gecko 的版本)
registerProtocolHandler()将一个网站注册为特定协议的处理程序
requestMediaKeySystemAccess()返回一个期约,解决为 MediaKeySystemAccess 对象
sendBeacon()异步传输一些小数据
serviceWorker返回用来与 ServiceWorker 实例交互的 ServiceWorkerContainer
share()返回当前平台的原生共享机制
storage返回暴露 Storage API 的 StorageManager 对象
userAgent返回浏览器的用户代理字符串
vendor返回浏览器的厂商名称
vendorSub返回浏览器厂商的更多信息
vibrate()触发设备振动
webdriver返回浏览器当前是否被自动化程序控制

浏览器元数据

1、Geolocation API

navigator.geolocation 属性暴露了 Geolocation API,可以让浏览器脚本感知当前设备的地理位 置。这个 API 只在安全执行环境(通过 HTTPS 获取的脚本)中可用。 地理位置信息的主要来源是 GPS 和 IP 地址、射频识别(RFID)、Wi-Fi及蓝牙 Mac 地址、 GSM/CDMA 蜂窝 ID 以及用户输入等信息。

2、Connection State 和 NetworkInformation API

navigator 对象还暴露了 NetworkInformation API,可以通过 navigator.connection 属性使用。 这个 API 提供了一些只读属性,并为连接属性变化事件处理程序定义了一个事件对象。

  • downlink :整数,表示当前设备的带宽(以 Mbit/s为单位),舍入到最接近的 25kbit/s。这个值可能会根据历史网络吞吐量计算,也可能根据连接技术的能力来计算。
  • downlinkMax :整数,表示当前设备最大的下行带宽(以 Mbit/s 为单位),根据网络的第一跳来确定。因为第一跳不一定反映端到端的网络速度,所以这个值只能用作粗略的上限值。
  • effectiveType :字符串枚举值,表示连接速度和质量。这些值对应不同的蜂窝数据网络连接技术,但也用于分类无线网络。这个值有以下 4 种可能。
    • slow-2g 往返时间 > 2000ms 下行带宽 < 50kbit/s
    • 2g 2000ms > 往返时间 ≥ 1400ms 70kbit/s > 下行带宽 ≥ 50kbit/s
    • 3g 1400ms > 往返时间 ≥ 270ms 700kbit/s > 下行带宽 ≥ 70kbit/s
    • 4g 270ms > 往返时间 ≥ 0ms 下行带宽 ≥ 700kbit/s
  • rtt :毫秒,表示当前网络实际的往返时间,舍入为最接近的 25 毫秒。这个值可能根据历史网络吞吐量计算,也可能根据连接技术的能力来计算。
  • type :字符串枚举值,表示网络连接技术。这个值可能为下列值之一。
    • bluetooth :蓝牙。
    • cellular :蜂窝。
    • ethernet :以太网。
    • none :无网络连接。相当于 navigator.onLine === false 。
    • mixed :多种网络混合。
    • other :其他。
    • unknown :不确定。
    • wifi :Wi-Fi。
    • wimax :WiMAX。
  • saveData :布尔值,表示用户设备是否启用了“节流”(reduced data)模式。
  • onchange :事件处理程序,会在任何连接状态变化时激发一个 change 事件。可以通过 navigator.connection.addEventListener('change',changeHandler) 或 navigator.connection.onchange = changeHandler 等方式使用。

3、Battery Status API

浏览器可以访问设备电池及充电状态的信息。 navigator.getBattery() 方法会返回一个期约实例,解决为一个 BatteryManager 对象。

navigator.getBattery().then((b) => console.log(b));
// BatteryManager { ... }

BatteryManager 包含 4 个只读属性,提供了设备电池的相关信息。

  • charging :布尔值,表示设备当前是否正接入电源充电。如果设备没有电池,则返回 true 。
  • chargingTime :整数,表示预计离电池充满还有多少秒。如果电池已充满或设备没有电池,则返回 0。
  • dischargingTime :整数,表示预计离电量耗尽还有多少秒。如果设备没有电池,则返回 Infinity 。
  • level :浮点数,表示电量百分比。电量完全耗尽返回 0.0,电池充满返回 1.0。如果设备没有电池,则返回 1.0。

这个 API 还提供了 4 个事件属性,可用于设置在相应的电池事件发生时调用的回调函数。可以通过给 BatteryManager 添加事件监听器,也可以通过给事件属性赋值来使用这些属性。

  • onchargingchange
  • onchargingtimechange
  • ondischargingtimechange
  • onlevelchange
navigator.getBattery().then((battery) => {
  // 添加充电状态变化时的处理程序
  const chargingChangeHandler = () => console.log('chargingchange');
  battery.onchargingchange = chargingChangeHandler;
  // 或
  battery.addEventListener('chargingchange', chargingChangeHandler);
  // 添加充电时间变化时的处理程序
  const chargingTimeChangeHandler = () => console.log('chargingtimechange');
  battery.onchargingtimechange = chargingTimeChangeHandler;
  // 或
  battery.addEventListener('chargingtimechange', chargingTimeChangeHandler);
  // 添加放电时间变化时的处理程序
  const dischargingTimeChangeHandler = () => console.log('dischargingtimechange');
  battery.ondischargingtimechange = dischargingTimeChangeHandler;
  // 或
  battery.addEventListener('dischargingtimechange', dischargingTimeChangeHandler);
  // 添加电量百分比变化时的处理程序
  const levelChangeHandler = () => console.log('levelchange');
  battery.onlevelchange = levelChangeHandler;
  // 或
  battery.addEventListener('levelchange', levelChangeHandler);
});

硬件

浏览器检测硬件的能力相当有限。不过, navigator 对象还是通过一些属性提供了基本信息。

1、处理器核心数

navigator.hardwareConcurrency 属性返回浏览器支持的逻辑处理器核心数量,包含表示核心 数的一个整数值(如果核心数无法确定,这个值就是 1)。关键在于,这个值表示浏览器可以并行执行的最大工作线程数量,不一定是实际的 CPU 核心数。

2、设备内存大小

navigator.deviceMemory 属性返回设备大致的系统内存大小,包含单位为 GB 的浮点数(舍入 为最接近的 2 的幂:512MB 返回 0.5,4GB 返回 4)。

3、最大触点数

navigator.maxTouchPoints 属性返回触摸屏支持的最大关联触点数量,包含一个整数值。