振动 API

W3C 候选推荐草案

关于此文档的更多细节
此版本
https://w3org.cn/TR/2026/CRD-vibration-20260514/
最新发布版本
https://w3org.cn/TR/vibration/
最新编辑草案
https://w3c.github.io/vibration/
历史
https://w3org.cn/standards/history/vibration/
提交历史
测试套件
https://wpt.live/vibration/
实现报告
https://w3c.github.io/vibration/reports/implementation.html
编辑
Anssi Kostiainen (Intel)
反馈
GitHub w3c/vibration拉取请求创建新议题打开的议题
public-device-apis@w3.org,主题行 [vibration] … message topic …归档
翻译
简体中文

摘要

本规范定义了一个 API,用于访问宿主设备的振动机制。振动是一种触觉反馈形式。

本文档状态

本节描述了本文件发布时的状态。当前的 W3C 出版物列表和本技术报告的最新版本可以在 W3C 标准和草案索引中找到。

本规范已在基于 Chromium 的浏览器中实现。WebKit 已发布了反对本规范的立场。Firefox 在 129 版中移除了其实现。目前形式下不太可能晋升为 W3C 推荐标准。

本文档代表小组对振动 API 范围和特性的共识。需要指出的是,小组意识到存在更高级的用例,无法通过此更简化的首个版本实现。计划在未来的修订中予以解决。

提供了自前一版本以来的变更历史。

本文档由 设备与传感器工作组 作为候选推荐草案在 推荐轨道 下发布。

作为候选推荐标准发布并不意味着得到 W3C 及其成员的认可。候选推荐标准草案整合了来自先前候选推荐标准的更改,工作组打算将其包含在后续的候选推荐标准快照中。

这是一份草案文件,可能随时被其他文件更新、替换或废弃。将其作为进展中的工作以外的引用是不恰当的。

本文档由在 W3C 专利政策 之下运作的小组制作。W3C 维护一份公开的专利披露清单,列出与小组交付物相关的所有专利披露;该页面还包括披露专利的说明。若个人实际了解某专利且认为该专利包含基本权利要求,必须依据W3C 专利政策》第 6 节进行披露。

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

1. 简介

本节是非规范性的。

本 API 专门用于仅需简单触觉反馈的使用场景。需要更细粒度控制的用例不在本规范范围之内。该 API 并非用于通用通知机制,此类需求应使用 Notifications API [NOTIFICATIONS] 规范。此外,确定振动是否已启用也不在本规范范围之内。

2. 一致性

除了标记为非规范性的章节外,本规范中的所有创作指南、图表、示例和注释均为非规范性内容。本规范中的其他所有内容均为规范性内容。

本文档中的关键字 MAYMUSTSHOULD 应按照 BCP 14 [RFC2119] [RFC8174] 的定义进行解释,仅当它们全部大写出现时(如本处所示)。

本规范定义了适用于单一产品的合规性标准:实现其中接口的用户代理

使用 ECMAScript 实现本规范中 API 的实现必须遵循 Web IDL 规范中定义的 ECMAScript 绑定[WEBIDL-1],因为本规范采用了该规范及其术语。

3. 振动接口

WebIDLtypedef (unsigned long or sequence<unsigned long>) VibratePattern;

partial interface Navigator {
    boolean vibrate (VibratePattern pattern);
};

The vibrate() 方法的步骤是运行处理振动模式算法。振动模式VibratePattern 对象表示。

处理振动模式的规则如下面的算法所示。

  1. patternvibrate() 方法的第一个参数。
  2. valid pattern 为将 pattern 传递给验证并规范化后得到的结果。
  3. 如果 文档可见性状态 不是 visible,则返回 false 并终止这些步骤。
    受信任(亦称特权)应用程序若与操作系统功能深度集成,即使该应用程序根本不可见,也可以振动设备,从而可以忽略前一步。
  4. 使用 this相关全局对象valid pattern 执行振动

要对给定的 pattern 振动模式 进行验证并规范化,请运行以下步骤。

  1. 如果 pattern 是一个列表,则继续下一步。否则执行以下子步骤。
    1. list 为最初为空的列表,并将 pattern 添加到 list
    2. pattern 设为 list
  2. max length 的值为 10。
  3. 如果 pattern 的长度大于 max length,则截断 pattern,仅保留前 max length 项。
    如果 pattern 的长度为偶数且不为零,则模式中的最后一项没有效果,实施者此时可以将其从 pattern 中移除。
  4. max duration 的值为 10000。
  5. 对于 pattern 中值大于 max duration 的每一项,将该项的值设为 max duration
  6. 返回 pattern

要使用 全局对象 global振动模式 pattern 执行振动,请运行以下步骤。

  1. 如果 global 未拥有 粘性激活,则返回 false 并终止这些步骤。
  2. 实现 MAY 返回 false 并终止这些步骤。
    例如,实施者可能会在以下情况下中止算法:没有振动硬件、用户设置了偏好表明特定来源的页面永不可振动设备,或实施者对页面可导致的振动总时长设定上限并拒绝超出该上限的请求。
  3. 如果已有另一实例的执行振动算法正在运行,则执行以下子步骤。
    1. 中止该其他实例的执行振动算法(若存在)。
    2. 如果 pattern 为空列表、仅包含一个值为 0 的条目,或设备无法振动,则返回 true 并终止这些步骤。
  4. 返回 true,然后异步继续执行这些步骤。
  5. 对于 pattern 中的每个 time,执行以下子步骤。
    1. 如果 time 的索引为偶数(第一个条目索引为 0),则让设备振动 time 毫秒。
    2. 否则等待 time 毫秒。

用户代理 检测到顶层浏览上下文的 Document可见性状态 发生改变时,MUST 中止已在运行的 处理振动模式算法(若存在)。

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

振动 API 本身并不产生可在网络上消费的数据,但它可以成为其他 API 事件的来源。特别是,某些传感器(如加速度计或陀螺仪)在制造过程中会出现细微缺陷,这为指纹识别提供了可利用的表面,攻击者可通过振动 API 产生的振动刺激进行利用。因此,振动 API 与其他机制结合时会产生间接的隐私风险,可能导致跨设备追踪和通信等意外隐私风险。此外,振动的设备可能被外部观察者看到,从而实现对用户的物理识别甚至追踪。

基于上述原因,用户代理 MAY 在 API 被使用时通知用户,并提供按来源或全局禁用该 API(等同于空操作)的机制。

用户代理 SHOULD 实施全局速率限制,以在一定时间内(例如每分钟或每小时)限制振动请求的次数,防止过度使用。

5. 示例

本节是非规范性的。

在下面的示例中,设备将振动 1000 毫秒(ms)。

// vibrate for 1000 ms
navigator.vibrate(1000);

// or alternatively
navigator.vibrate([1000]);

在下面的示例中,模式将导致设备振动 50 ms、静止 100 ms,然后再振动 150 ms。

navigator.vibrate([50, 100, 150]);

下面的示例会取消所有已有的振动。

// cancel any existing vibrations
navigator.vibrate(0);

// or alternatively
navigator.vibrate([]);

A. 致谢

小组衷心感谢 Justin Lebar、Mounir Lamouri、Jonas Sicking 以及 Mozilla WebAPI 团队的贡献,并感谢他们提供 WebVibrator 原型作为最初的输入。感谢 Anne van Kesteren 对如何在其他上下文中复用规范的建议,以及 Lukasz Olejnik 对隐私考虑的贡献。最后,感谢张志强提供的简体中文翻译。

B. 变更

W3C 推荐 2016 年 10 月 18 日 以来的变更

其他不影响文档解释的变更

C. IDL 索引

WebIDLtypedef (unsigned long or sequence<unsigned long>) VibratePattern;

partial interface Navigator {
    boolean vibrate (VibratePattern pattern);
};

D. 参考文献

D.1 规范性参考文献

[dom]
DOM Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://dom.spec.whatwg.org/
[html]
HTML 标准. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. 活标准. URL: https://html.whatwg.cn/multipage/
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. 1997年3月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
RFC 2119 关键词中大小写的歧义. B. Leiba. IETF. 2017年5月. 最佳当前实践. URL: https://www.rfc-editor.org/rfc/rfc8174
[WEBIDL-1]
Web IDL Standard. Edgar Chen; Timothy Gu. WHATWG. Living Standard. URL: https://webidl.spec.whatwg.org/

D.2 资料性参考文献

[通知]
通知 API 标准。Anne van Kesteren。WHATWG。Living Standard。URL: https://notifications.spec.whatwg.org/