1. 引言
Accelerometer、
LinearAccelerationSensor
和 GravitySensor
API 扩展了 Generic Sensor API [GENERIC-SENSOR]
接口,以提供有关在设备定义的局部坐标系中施加到设备
X、Y 和 Z 轴上的加速度信息。
2. 示例
let sensor= new Accelerometer(); sensor. start(); sensor. onreading= () => { console. log( "Acceleration along X-axis: " + sensor. x); console. log( "Acceleration along Y-axis: " + sensor. y); console. log( "Acceleration along Z-axis: " + sensor. z); } sensor. onerror= event=> console. log( event. error. name, event. error. message);
let sensor= new GravitySensor({ frequency: 5 , referenceFrame: "screen" }); sensor. onreading= () => { if ( sensor. y>= 9.8 ) { console. log( "Web page is perpendicular to the ground." ); } } sensor. start();
const shakeThreshold= 25 ; let sensor= new LinearAccelerationSensor({ frequency: 60 }); sensor. addEventListener( 'reading' , () => { if ( sensor. x> shakeThreshold) { console. log( "Shake detected." ); } }); sensor. start();
3. 用例和需求
用例和需求列在 Motion Sensors Explainer 和 Sensor use cases 文档中。
4. 安全与隐私考量
由加速度计等惯性传感器提供的传感器读数 可能被攻击者用于利用各种安全威胁,例如 按键记录、位置 跟踪、 指纹识别和用户 识别。
安全社区发表的研究论文,例如 [KEYSTROKEDEFENSE], 表明 通过限制频率并不能完全消除成功攻击的风险,而限流 可能会极大影响有正当理由使用传感器的 Web 应用的实用性。
[TOUCHSIGNATURES] 和 [ACCESSORY] 研究论文 提出,实现可以 在惯性传感器使用中提供视觉指示和/或要求用户明确同意 访问传感器读数。这些缓解策略补充了 Generic Sensor API 通用缓解措施 中定义的缓解措施 [GENERIC-SENSOR]。
本规范定义了一个加速度计读数量化 算法(由 从最新读数获取值操作调用),以缓解 传感器校准指纹识别 [SENSORID] 以及依赖高精度传感器读数的攻击。量化算法的细节 遵循 W3C Privacy Interest Group 的建议。
5. Permissions Policy 集成
本规范利用由字符串
"accelerometer"
标识的策略控制特性,该特性定义于 [DEVICE-ORIENTATION]。
6. 模型
6.1. 加速度计
Accelerometer 传感器类型具有 以下关联数据:
- 扩展传感器接口
- 传感器权限名称
- 传感器特性名称
- 权限撤销算法
-
以 "
accelerometer" 调用通用传感器权限撤销 算法。 - 默认传感器
-
设备的主加速度计传感器。
- 虚拟传感器类型
对于 Accelerometer 传感器类型的一个 Sensor,
其最新读数包含
三个条目,
其键为 "x"、"y"、"z",其值包含设备在相应轴上的加速度。
加速度是设备速度相对于时间的 变化率。其单位为米每二次方秒(m/s2)[SI]。
加速度测量的参考系必须是惯性的,例如处于自由 落体状态的设备会 在每个轴上提供 0(m/s2)的加速度值。
6.2. 线性加速度传感器
Linear Acceleration Sensor 传感器类型具有 以下关联数据:
- 扩展传感器接口
- 传感器权限名称
- 传感器特性名称
- 权限撤销算法
-
以 "
accelerometer" 调用通用传感器权限 撤销算法。 - 虚拟传感器类型
对于 Linear Acceleration Sensor 传感器
类型的一个 Sensor,
其最新读数包含三个条目,
其键为 "x"、"y"、"z",其值包含设备在相应轴上的线性加速度。
线性 加速度是施加到托管传感器的设备上的一种加速度, 不包含重力的贡献。
注:重力和线性加速度之间的关系在 Motion Sensors Explainer § gravity-and-linear-acceleration 中讨论。
6.3. 重力传感器
Gravity Sensor 传感器类型具有以下关联数据:
- 扩展传感器接口
- 传感器权限名称
- 传感器特性名称
- 权限撤销算法
-
以 "
accelerometer" 调用通用传感器权限 撤销算法。 - 虚拟传感器类型
-
"
gravity"
对于 Gravity
Sensor 传感器类型的一个 Sensor,
其最新读数包含
三个条目,
其键为 "x"、"y"、"z",其值包含由于重力造成的、关于相应轴的加速度。
重力是设备加速度中 阻止其速度朝附近质量增加的分量。长时间处于自由落体状态的设备可能会计算出错误的重力值。
注:重力和线性加速度之间的关系在 Motion Sensors Explainer § gravity-and-linear-acceleration 中讨论。
6.4. 参考坐标系
局部坐标系表示
Accelerometer、
LinearAccelerationSensor
和 GravitySensor
读数的参考坐标系。它可以是设备坐标系
或屏幕坐标系。
设备坐标 系定义为绑定到物理设备的三维 笛卡尔坐标系(x、y、z)。 对于带显示器的设备,设备坐标系的原点是 设备显示器的中心。如果设备以其默认位置握持, Y 轴指向显示器顶部,X 轴指向 显示器右侧,而 Z 轴是 X 轴和 Y 轴的向量积, 它从显示器向外并朝向观看者。设备坐标系保持静止, 不受DOM 屏幕方向影响(见下图)。
屏幕坐标 系定义为绑定到DOM 屏幕的三维 笛卡尔坐标系(x、y、z)。 屏幕坐标系的原点位于 DOM 屏幕的中心。Y 轴始终指向 DOM 屏幕顶部, X 轴指向 DOM 屏幕右侧, Z 轴是 X 轴和 Y 轴的向量积,它从 DOM 屏幕 向外并朝向观看者(见下图)。
设备坐标系与屏幕坐标系之间的主要区别 在于屏幕坐标系始终跟随DOM 屏幕方向, 即如果当前方向类型 改变,它会相对于设备交换 X 轴和 Y 轴。相比之下,设备坐标系将始终相对于 设备保持静止。
7. API
7.1. Accelerometer 接口
[SecureContext ,Exposed =Window ]interface :Accelerometer Sensor {constructor (optional AccelerometerSensorOptions = {});options readonly attribute double ?;x readonly attribute double ?;y readonly attribute double ?; };z enum {AccelerometerLocalCoordinateSystem ,"device" };"screen" dictionary :AccelerometerSensorOptions SensorOptions {AccelerometerLocalCoordinateSystem = "device"; };referenceFrame
Accelerometer
的受支持传感器选项为 "frequency" 和 "referenceFrame"。
7.1.1. Accelerometer.x
x
属性属于 Accelerometer
接口,它返回以
this 和 "x" 为参数调用 从最新读数获取值所得的结果。它表示沿 x 轴的加速度。
7.1.2. Accelerometer.y
y
属性属于 Accelerometer
接口,它返回以
this 和 "y" 为参数调用 从最新读数获取值所得的结果。它表示沿 y 轴的加速度。
7.1.3. Accelerometer.z
z
属性属于 Accelerometer
接口,它返回以
this 和 "z" 为参数调用 从最新读数获取值所得的结果。它表示沿 z 轴的加速度。
7.2. LinearAccelerationSensor 接口
[SecureContext ,Exposed =Window ]interface :LinearAccelerationSensor Accelerometer {constructor (optional AccelerometerSensorOptions = {}); };options
LinearAccelerationSensor
的受支持传感器选项为 "frequency" 和 "referenceFrame"。
7.2.1. LinearAccelerationSensor.x
x
属性属于 LinearAccelerationSensor
接口,它返回以
this 和 "x" 为参数调用 从最新读数获取值所得的结果。它表示沿 x 轴的线性加速度。
7.2.2. LinearAccelerationSensor.y
y
属性属于 LinearAccelerationSensor
接口,它返回以
this 和 "y" 为参数调用 从最新读数获取值所得的结果。它表示沿 y 轴的线性加速度。
7.2.3. LinearAccelerationSensor.z
z
属性属于 LinearAccelerationSensor
接口,它返回以
this 和 "z" 为参数调用 从最新读数获取值所得的结果。它表示沿 z 轴的线性加速度。
7.3. GravitySensor 接口
[SecureContext ,Exposed =Window ]interface :GravitySensor Accelerometer {constructor (optional AccelerometerSensorOptions = {}); };options
GravitySensor
的受支持传感器选项为 "frequency" 和 "referenceFrame"。
7.3.1. GravitySensor.x
x
属性属于 GravitySensor
接口,它返回以
this 和 "x" 为参数调用 从最新读数获取值所得的结果。它表示由于
重力造成的沿 x 轴的加速度作用。
7.3.2. GravitySensor.y
y
属性属于 GravitySensor
接口,它返回以
this 和 "y" 为参数调用 从最新读数获取值所得的结果。它表示由于
重力造成的沿 y 轴的加速度作用。
7.3.3. GravitySensor.z
z
属性属于 GravitySensor
接口,它返回以
this 和 "z" 为参数调用 从最新读数获取值所得的结果。它表示由于
重力造成的沿 z 轴的加速度作用。
8. 抽象操作
8.1. 构造加速度计对象
- 输入
-
object,一个
Accelerometer、LinearAccelerationSensor或GravitySensor对象。options,一个
AccelerometerSensorOptions对象。
-
令 allowed 为以 object 的传感器类型调用 检查传感器策略控制 特性所得的结果。
-
如果 allowed 为 false,则:
-
以 object 和 options 调用 初始化传感器对象。
-
如果 options.
referenceFrame为 "screen",则:
8.2. 加速度计读数量化算法
Accelerometer 传感器类型定义了以下 读数量化算法:
-
令 quantizedReading 为 reading。
-
如果 quantizedReading["x"] 不为 null,则将 quantizedReading["x"] 设置为 最接近的 0.1 m/s2。
-
如果 quantizedReading["y"] 不为 null,则将 quantizedReading["y"] 设置为 最接近的 0.1 m/s2。
-
如果 quantizedReading["z"] 不为 null,则将 quantizedReading["z"] 设置为 最接近的 0.1 m/s2。
-
返回 quantizedReading。
9. 自动化
本节通过提供 Accelerometer 特定的虚拟传感器元数据, 扩展了 Generic Sensor API § 9 自动化。本规范使用的一些虚拟传感器类型定义于 [DEVICE-ORIENTATION]。
9.1. 加速度计自动化
accelerometer 虚拟传感器类型及其在 按类型虚拟传感器元数据映射 中对应的条目,定义于 Device Orientation and Motion § automation。
9.2. 线性加速度计自动化
linear-acceleration 虚拟传感器类型及其在 按类型虚拟传感器元数据映射 中对应的条目,定义于 Device Orientation and Motion § automation。
9.3. 重力自动化
按类型虚拟传感器元数据映射 必须具有以下条目:
10. 致谢
感谢 Tobie Langel 在 Generic Sensor API 上的工作。
感谢 W3C Privacy Interest Group 和 Paul Jensen 提出并讨论传感器校准指纹识别缓解方案。