陀螺仪

W3C 候选推荐草案

关于本文档的更多信息
本版本:
https://www.w3.org/TR/2026/CRD-gyroscope-20260202/
最新发布版本:
https://www.w3.org/TR/gyroscope/
编辑草案:
https://w3c.github.io/gyroscope/
以往版本:
历史记录:
https://www.w3.org/standards/history/gyroscope/
反馈:
public-device-apis@w3.org 邮件主题请填写“[gyroscope] … 消息主题 …” (邮件存档)
陀螺仪问题仓库
实现报告:
https://www.w3.org/wiki/DAS/Implementations
编辑:
Anssi Kostiainen (英特尔公司)
前编辑:
Mikhail Pozdnyakov (英特尔公司)
测试套件:
GitHub 上的 web-platform-tests

摘要

本规范定义了一个用于监测设备本地三个主轴旋转速率的具体传感器接口。

本文档状态

本节描述了本文档在出版时的状态。W3C当前出版物列表及本技术报告的最新修订,可查阅 W3C技术报告索引。

本文档由 设备与传感器工作组 以候选推荐草案方式发布,采用推荐流程。本文档拟成为W3C推荐标准。

如需对本文档提出意见,请发送至 public-device-apis@w3.org订阅存档)。 邮件发送时,请在主题中写明“gyroscope”, 推荐格式如下: “[gyroscope] …评论摘要…”。 欢迎任何意见反馈。

作为候选推荐发布,并不代表W3C 及其成员认可此内容。候选推荐草案已整合了工作组计划纳入后续候选推荐快照的前一候选推荐变更。本文件为草案,可能随时被更新、替换或废止。请勿将本文档作为正式成果引用,仅作为在研内容。

本文档进入建议推荐阶段的标准,是至少有两个独立且可互操作的用户代理实现了本规范的全部功能, 这些将通过工作组制定的测试套件进行用户代理测试,工作组将编写实施报告以追踪进展。

本文档由遵循 W3C专利政策的工作组编写。 W3C维护一份相关专利披露公示名单, 与本组交付物相关的专利披露信息会发布在该页面,同时该页也提供专利披露说明。 若个人确知某专利涉及基本权利要求, 必须依照W3C专利政策第6节进行披露。

本文档受 2025年8月18日W3C流程文件约束。

本文件随时维护和更新,部分内容为在研项目。

1. 简介

陀螺仪 API 扩展了 Generic Sensor API [GENERIC-SENSOR],用于提供设备本地 X、Y 和 Z 轴周围的角速度信息, 单位为弧度每秒。

2. 用例与需求

用例和需求可参见 Motion Sensors Explainer 文档。

3. 示例

let sensor = new Gyroscope();
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);

4. 安全性与隐私注意事项

惯性传感器(如陀螺仪)提供的传感器读数,可能被攻击者用于发动各种安全威胁, 例如 键盘监听位置追踪指纹识别用户识别 甚至 窃听

安全社区发表的研究论文,例如 [KEYSTROKEDEFENSE] 指出, 仅通过降低采样频率无法彻底消除攻击风险,且限频可能大大影响有正当理由使用传感器的 Web 应用的可用性。

[TOUCHSIGNATURES] 研究论文建议, 实现时可在惯性传感器被使用时提供可视化提示,和/或要求用户明确授权传感器读数的访问。 这些缓解策略补充了在 Generic Sensor API [GENERIC-SENSOR] 中定义的通用缓解措施

5. 权限策略集成

本规范使用 策略控制特性,其标识字符串为 "gyroscope", 该字符串在 [DEVICE-ORIENTATION] 中定义。

6. 模型

Gyroscope 传感器类型包含以下相关数据:

扩展传感器接口

Gyroscope

传感器权限名称

"gyroscope"

传感器特性名称

"gyroscope"

权限撤销算法

调用 通用传感器权限撤销算法, 参数为 "gyroscope"。

默认传感器

设备的主陀螺仪传感器。

虚拟传感器类型

"gyroscope"

最新读数Sensor Gyroscope 传感器类型 包含三个 ,其 为 "x", "y", "z",其为该轴当前的角速度

角速度 指设备绕某指定轴在设备定义的本地坐标系中旋转的速率。 单位为弧度每秒(rad/s)[SI]

当前角速度的符号取决于旋转方向, 应符合设备定义的本地坐标系的右手法则:沿轴正方向看去,为顺时针为正。 (见下图)

设备本地坐标系与旋转。

6.1. 参考系

本地坐标系表明 Gyroscope 读数的参考系。可以是设备坐标系,也可以是屏幕坐标系

7. API

7.1. Gyroscope 接口

[SecureContext, Exposed=Window]
interface Gyroscope : Sensor {
  constructor(optional GyroscopeSensorOptions sensorOptions = {});
  readonly attribute double? x;
  readonly attribute double? y;
  readonly attribute double? z;
};

enum GyroscopeLocalCoordinateSystem { "device", "screen" };

dictionary GyroscopeSensorOptions : SensorOptions {
  GyroscopeLocalCoordinateSystem referenceFrame = "device";
};
new Gyroscope(sensorOptions) 构造函数 步骤如下:调用 构造陀螺仪对象 抽象操作,参数为 thissensorOptions

GyroscopeGyroscope 支持的传感器选项包括 "frequency" 和 "referenceFrame"。

7.1.1. Gyroscope.x

x 属性表示 Gyroscope 接口当前绕 X 轴的角速度。 换句话说,该属性返回对 get value from latest reading 的调用结果,参数为 this 和 "x"。

7.1.2. Gyroscope.y

y 属性表示 Gyroscope 接口当前绕 Y 轴的角速度。 换句话说,该属性返回对 get value from latest reading 的调用结果,参数为 this 和 "y"。

7.1.3. Gyroscope.z

z 属性表示 Gyroscope 接口当前绕 Z 轴的角速度。 换句话说,该属性返回对 get value from latest reading 的调用结果,参数为 this 和 "z"。

8. 抽象操作

8.1. 构造陀螺仪对象

输入

objectGyroscope 对象。

optionsGyroscopeSensorOptions 对象。

  1. allowed 为调用 check sensor policy-controlled features ,参数为 object传感器类型的结果。

  2. allowed 为 false:

    1. 抛出 SecurityError DOMException

  3. objectoptions 调用 initialize a sensor object

  4. 如果 options.referenceFrame 为 "screen",则:

    1. object本地坐标系设置为屏幕坐标系

  5. 否则,将 object本地坐标系设置为设备坐标系

9. 自动化

本节扩展了 Generic Sensor API § 9 Automation,提供Gyroscope 专属的虚拟传感器元数据。

gyroscope 虚拟传感器类型及其在 每类型虚拟传感器元数据map 中的对应项,见 Device Orientation and Motion § automation

10. 致谢

Tobie Langel 对 Generic Sensor API 的工作。

11. 一致性

一致性要求通过描述性断言和 RFC 2119 术语综合表达。在本规范的规范性部分,“MUST”(必须)、“MUST NOT”(禁止)、“REQUIRED”(必需)、“SHALL”(应)、“SHALL NOT”(不得)、“SHOULD”(应当)、“SHOULD NOT”(不应)、“RECOMMENDED”(推荐)、“MAY”(可选)、“OPTIONAL”(可选)这些关键词须按照 RFC 2119 的规定进行解释。为了便于阅读,本规范未将这些词全部使用大写字母。

除非明确标记为非规范性内容、示例或注释外,本规范文本均为规范性内容。[RFC2119]

符合规范的用户代理必须实现本规范中所有适用于用户代理的要求。

本规范中的 IDL 片段须按照 Web IDL 规范对合规 IDL 片段的要求进行解释。[WEBIDL]

索引

本规范定义的术语

引用中定义的术语

参考文献

规范性引用

[ACCELEROMETER]
Anssi Kostiainen. 加速度计。网址:https://w3c.github.io/accelerometer/
[DEVICE-ORIENTATION]
Reilly Grant;Marcos Caceres。设备方向与运动。网址:https://w3c.github.io/deviceorientation/
[GENERIC-SENSOR]
Rick Waldron。通用传感器 API。网址:https://w3c.github.io/sensors/
[INFRA]
Anne van Kesteren;Domenic Denicola。基础标准。动态标准。网址:https://infra.spec.whatwg.org/
[PERMISSIONS]
Marcos Caceres;Mike Taylor。权限。网址: https://w3c.github.io/permissions/
[PERMISSIONS-POLICY-1]
Ian Clelland。权限策略。网址:https://w3c.github.io/webappsec-permissions-policy/
[RFC2119]
S. Bradner。RFC 中用于指示需求级别的关键词。1997年3月。最佳当前实践。网址:https://datatracker.ietf.org/doc/html/rfc2119
[WEBIDL]
Edgar Chen;Timothy Gu。Web IDL 标准。动态标准。网址:https://webidl.spec.whatwg.org/

补充性引用

[KEYSTROKEDEFENSE]
宋一航等。两种针对基于运动的按键推断攻击的新型防御方法。2014年。参考资料。网址:https://arxiv.org/abs/1410.7746
[SI]
国际单位制(SI)手册,第八版。2014年。第八版。网址:http://www.bipm.org/en/publications/si-brochure/
[TOUCHSIGNATURES]
Mehrnezhad, Maryam 等。Touchsignatures:基于移动传感器数据和 JavaScript 的用户触控操作与密码识别。2016年。参考资料。网址:https://arxiv.org/abs/1602.04115

IDL 索引

[SecureContext, Exposed=Window]
interface Gyroscope : Sensor {
  constructor(optional GyroscopeSensorOptions sensorOptions = {});
  readonly attribute double? x;
  readonly attribute double? y;
  readonly attribute double? z;
};

enum GyroscopeLocalCoordinateSystem { "device", "screen" };

dictionary GyroscopeSensorOptions : SensorOptions {
  GyroscopeLocalCoordinateSystem referenceFrame = "device";
};

MDN

Gyroscope/Gyroscope

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Gyroscope/x

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Gyroscope/y

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Gyroscope/z

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Gyroscope

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Headers/Feature-Policy/gyroscope

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?