属性和方法
| 属性/方法 | 说明 |
|---|---|
| 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 属性返回触摸屏支持的最大关联触点数量,包含一个整数值。