1. 简介
加速度计、
线性加速度传感器
和重力传感器
API 扩展了 Generic Sensor API [GENERIC-SENSOR] 接口,用于提供设备定义的 加速度 在设备
X、Y、Z 轴本地坐标系(local coordinate system)上的测量信息。
2. 示例
let sensor= new Accelerometer(); sensor. start(); sensor. onreading= () => { console. log( "沿 X 轴加速度: " + sensor. x); console. log( "沿 Y 轴加速度: " + sensor. y); console. log( "沿 Z 轴加速度: " + 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( "网页垂直于地面。" ); } } sensor. start();
const shakeThreshold= 25 ; let sensor= new LinearAccelerationSensor({ frequency: 60 }); sensor. addEventListener( 'reading' , () => { if ( sensor. x> shakeThreshold) { console. log( "检测到晃动。" ); } }); sensor. start();
3. 用例与需求
用例和需求见 Motion Sensors Explainer 与 Sensor use cases 文档。
4. 安全与隐私注意事项
通过惯性传感器(如加速度计)提供的 传感器读数, 可能被攻击者利用以发起各种安全威胁,例如键盘记录、 位置追踪、设备指纹与用户识别等。
安全界发布的研究论文,例如 [KEYSTROKEDEFENSE], 表明仅通过限制频率并不能完全消除攻击风险,反而可能极大影响有合理需求的 web 应用的可用性。
[TOUCHSIGNATURES] 和 [ACCESSORY] 研究提出, 实现应在惯性传感器使用时提供可视提示,和/或要求用户明确授权以访问传感器读数。这些缓解措施补充了 Generic Sensor API [GENERIC-SENSOR]中定义的通用缓解策略。
本规范定义了 加速度计读数量化算法 (由获取最新读数值操作调用),以缓解传感器校准指纹 [SENSORID] 及依赖高精度传感器读数的攻击。数量化算法细节遵循 W3C 隐私兴趣组的建议。
5. 权限策略集成
本规范采用权限策略控制特性,其关键字为
"accelerometer",
由[DEVICE-ORIENTATION]定义。
6. 模型
6.1. 加速度计
加速度计 传感器类型 关联如下数据:
- 扩展传感器接口
- 传感器权限名
- 传感器特性名
- 权限撤销算法
-
用 "
accelerometer" 调用 通用传感器权限撤销算法。 - 默认传感器
-
设备的主加速度计传感器。
- 虚拟传感器类型
最新读数,
对于 Sensor
类型为加速度计的传感器类型,
包含三个条目,
键为 "x"、"y"、"z",其值
表示设备在对应轴的加速度。
加速度 是设备速度相对于时间的变化率,单位为米每二次方秒 (m/s2) [SI]。
加速度 测量的参考系应为惯性系,例如设备处于自由落体状态时每个轴的加速度读数为 0 (m/s2)。
加速度 的正负号应遵循右手定则,并以本地坐标系(见下图)为准。
6.2. 线性加速度传感器
线性加速度传感器 传感器类型 关联如下数据:
- 扩展传感器接口
- 传感器权限名
- 传感器特性名
- 权限撤销算法
-
用 "
accelerometer" 调用 通用传感器权限撤销算法。 - 虚拟传感器类型
最新读数,
对于Sensor
类型为线性加速度传感器的传感器类型,
包含三个条目,键
为 "x"、"y"、"z",其值
表示设备在对应轴的线性加速度。
线性加速度 是指作用于传感器所在设备、不包含重力分量的加速度。
注: 重力与 线性加速度 的关系详见 Motion Sensors Explainer § gravity-and-linear-acceleration。
6.3. 重力传感器
重力传感器 传感器类型 关联如下数据:
- 扩展传感器接口
- 传感器权限名
- 传感器特性名
- 权限撤销算法
-
用 "
accelerometer" 调用 通用传感器权限撤销算法。 - 虚拟传感器类型
-
"
gravity"
最新读数
,对于Sensor
类型为重力传感器的传感器类型,
包含三个条目,其键
为 "x"、"y"、"z",其值
表示对应轴方向的重力加速度。
重力 是指设备加速度中阻止其速度朝向临近天体质量增加的那部分分量。较长时间处于自由落体的设备可能计算出错误的重力值。
注: 重力与 线性加速度 的关系详见 Motion Sensors Explainer § gravity-and-linear-acceleration。
6.4. 参考系
本地坐标系表示加速度计、
线性加速度传感器、
以及重力传感器
读数的参考系。它可以是设备坐标系或
屏幕坐标系。
设备坐标系定义为与物理设备绑定的三维笛卡尔坐标系(x、y、z)。 对于带有显示屏的设备,设备坐标系的原点在设备显示屏中央。如果设备以默认姿态持握, Y 轴指向显示屏顶部,X 轴指向显示屏右侧,Z 轴是 X、Y 轴的向量积,指向屏幕外部、朝向用户。 设备坐标系始终稳定,不受 dom screen 朝向变化影响(见下图)。
屏幕坐标系定义为与dom screen 绑定的三维笛卡尔坐标系(x、y、z)。屏幕坐标系的原点在 dom screen 中心。Y 轴始终指向 dom screen 顶部,X 轴指向 dom screen 右侧,Z 轴是 X、Y 轴的向量积,指向 dom screen 屏幕外部、朝向用户(见下图)。
设备坐标系与屏幕坐标系 主要区别在于屏幕坐标系会始终跟随 dom screen 朝向变化, 即,当前朝向类型发生变化时,X 轴与 Y 轴会相对于设备变换。 而设备坐标系 总是相对于设备保持不变。
7. API
7.1. 加速度计接口
[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 "为参数调用
get value from latest reading的结果。它表示 x 轴方向的加速度。
7.1.2. Accelerometer.y
y
属性(Accelerometer接口)
返回以this和" y "为参数调用
get value from latest reading的结果。它表示 y 轴方向的加速度。
7.1.3. Accelerometer.z
z
属性(Accelerometer接口)
返回以this和" z "为参数调用
get value from latest reading的结果。它表示 z 轴方向的加速度。
7.2. 线性加速度传感器接口
[SecureContext ,Exposed =Window ]interface :LinearAccelerationSensor Accelerometer {constructor (optional AccelerometerSensorOptions = {}); };options
线性加速度传感器
LinearAccelerationSensor
的支持选项为 “frequency” 和 “referenceFrame”。
7.2.1. LinearAccelerationSensor.x
x
属性(LinearAccelerationSensor接口)
返回以this和" x "为参数调用
get value from latest reading的结果。它表示 x 轴的线性加速度。
7.2.2. LinearAccelerationSensor.y
y
属性(LinearAccelerationSensor接口)
返回以this和" y "为参数调用
get value from latest reading的结果。它表示 y 轴的线性加速度。
7.2.3. LinearAccelerationSensor.z
z
属性(LinearAccelerationSensor接口)
返回以this和" z "为参数调用
get value from latest reading的结果。它表示 z 轴的线性加速度。
7.3. 重力传感器接口
[SecureContext ,Exposed =Window ]interface :GravitySensor Accelerometer {constructor (optional AccelerometerSensorOptions = {}); };options
重力传感器
GravitySensor
的支持选项为 “frequency” 和 “referenceFrame”。
7.3.1. GravitySensor.x
x
属性(GravitySensor接口)
返回以this和" x "为参数调用
get value from latest reading的结果。它表示由重力导致的 x 轴加速度分量。
7.3.2. GravitySensor.y
y
属性(GravitySensor接口)
返回以this和" y "为参数调用
get value from latest reading的结果。它表示由重力导致的 y 轴加速度分量。
7.3.3. GravitySensor.z
z
属性(GravitySensor接口)
返回以this和" z "为参数调用
get value from latest reading的结果。它表示由重力导致的 z 轴加速度分量。
8. 抽象操作
8.1. 构造加速度计对象
- 输入
-
object,
Accelerometer、LinearAccelerationSensor或GravitySensor对象。options,
AccelerometerSensorOptions对象。
-
令allowed为调用 检查传感器权限策略特性 ,参数为object的 传感器类型。
-
如果allowed为 false:
-
以object和options为参数调用 初始化传感器对象。
-
如果options.
referenceFrame为 "screen":
8.2. 加速度计读数量化算法
-
令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. 自动化
本节通过提供加速度计专用的虚拟传感器元数据,扩展了Generic Sensor API § 9 Automation。本规范使用的部分虚拟传感器类型在 [DEVICE-ORIENTATION] 中定义。
9.1. 加速度计自动化
加速度计虚拟传感器类型及其在按类型虚拟传感器元数据 映射 中的对应条目定义见 Device Orientation and Motion § automation。
9.2. 线性加速度计自动化
线性加速度虚拟传感器类型及其在按类型虚拟传感器元数据 映射 中的对应条目定义见 Device Orientation and Motion § automation。
9.3. 重力自动化
按类型虚拟传感器元数据 映射 必须包含如下条目:
10. 致谢
Tobie Langel 在 Generic Sensor API 上的贡献。
W3C 隐私利益小组和 Paul Jensen 对传感器校准指纹特征防护方案的建议与讨论。