接近传感器

W3C 工作草案,

关于本文档的更多详细信息
本版本:
https://www.w3.org/TR/2026/WD-proximity-20260514/
最新发布版本:
https://www.w3.org/TR/proximity/
编辑草案:
https://w3c.github.io/proximity/
先前版本:
历史:
https://www.w3.org/standards/history/proximity/
反馈:
public-device-apis@w3.org 主题行使用“[proximity] … 消息主题 …”(存档)
GitHub
编辑:
Anssi Kostiainen(Intel Corporation)
Rijubrata Bhaumik(Intel Corporation)
前任编辑:
Dzung D Tran(Intel Corporation)
Bug 报告:
通过 GitHub 上的 w3c/proximity 仓库
问题跟踪:
问题
测试套件:
GitHub 上的 web-platform-tests

摘要

本规范定义了一个具体的传感器接口,用于在没有物理接触的情况下 监测附近物理对象的存在。

本文档状态

本节描述本文档在其发布时的状态。当前 W3C 出版物列表以及本技术报告的最新修订版 可在 W3C 技术报告 索引中找到。

本文档由 Devices and Sensors Working Group 作为工作草案使用 推荐 轨道发布。本文档旨在成为 W3C 推荐标准。

如果你希望就本文档发表评论,请发送至 public-device-apis@w3.org (订阅, 存档)。 发送电子邮件时, 请将文本“proximity”放入主题中, 最好采用如下形式: “[proximity] …评论摘要…”。 欢迎所有评论。

作为工作草案发布并不意味着 W3C 及其成员认可该文档。这是一个草案文档,可能会 随时被其他文档更新、替换或 废弃。除作为进行中的工作外,不宜引用 本文档。

本文档由一个根据 W3C 专利政策运作的组制作。 W3C 维护了一个与该组交付物相关的任何专利 披露的公开列表; 该页面还包含披露专利的说明。 实际知晓某项专利且认为该专利包含必要权利要求的个人 必须按照 W3C 专利政策第 6 节披露该信息。

本文档受 2025 年 8 月 18 日 W3C 流程文档管辖。

本规范未在任何浏览器引擎中实现。预计其当前形式不会推进 到 W3C 推荐标准。

Devices and Sensors Working Group 将在请求水平审查之前,对 API 的安全与隐私方面 执行一轮自审和 修订。现有的安全 与隐私问题可用。

1. 引言

Proximity Sensor 扩展了 Generic Sensor API [GENERIC-SENSOR], 以提供由设备主接近传感器检测到的接近级别信息。接近级别报告为从 传感器到最近可见表面的距离(以厘米为单位)。§ 9 接近传感器的 局限 进一步描述了潜在的局限,以及为什么不同设备报告的精确距离值可能不同, 这是由于检测方法、传感器构造等方面的差异。此外,某些接近传感器可能只能 提供一个布尔值,用于指示附近是否存在物理对象, 更像是存在检测,而不是距离的绝对值。

2. 示例

let sensor = new ProximitySensor();
sensor.start();

sensor.onreading = () => console.log(sensor.distance);

sensor.onerror = event => console.log(event.error.name, event.error.message);

3. 安全与隐私考量

Proximity sensor 提供有关传感器与附近对象接近程度的信息, 因而可能暴露对用户识别 和/或 指纹识别攻击敏感的隐私信息。

为缓解这些问题,用户代理应使用以下一种或两种缓解 策略:

这些缓解策略补充了 Generic Sensor API [GENERIC-SENSOR] 中定义的通用 缓解措施。

4. Permissions Policy 集成

本规范定义了一个由字符串 "proximity-sensor" 标识的策略控制特性。 其默认允许列表为 "self"。

5. 模型

Proximity Sensor 传感器类型具有以下关联数据:

扩展传感器接口

ProximitySensor

传感器权限名称

"proximity"

传感器特性名称

"proximity-sensor"

权限撤销算法

以 "proximity" 调用通用传感器权限撤销 算法。

默认传感器

设备的主接近检测器。

虚拟传感器类型

"proximity"

对于 Proximity Sensor 传感器类型的一个 Sensor, 其最新读数包含 三个条目, 其键为 "distance"、"max"、"near",其值包含 distance、 max 和 near 值。

distance 是一个值, 表示设备与位于感测范围内的物理对象最近可见表面之间的距离。 其单位为厘米(cm)。

max 是一个值,表示 主接近检测器的最大感测范围, 以厘米为单位。

near 是一个值,表示 主接近检测器附近存在 可见表面。

6. API

6.1. ProximitySensor 接口

[SecureContext, Exposed=Window]
interface ProximitySensor : Sensor {
  constructor(optional SensorOptions sensorOptions = {});
  readonly attribute double? distance;
  readonly attribute double? max;
  readonly attribute boolean? near;
};

为构造一个 ProximitySensor 对象,用户代理必须调用 构造接近传感器对象抽象 操作。

6.1.1. distance 属性

distance 属性属于 ProximitySensor 接口,它返回以 this 和 "distance" 为参数调用 从最新读数获取值所得的结果。

如果物理对象位于感测范围之外,该属性必须返回 null。

6.1.2. max 属性

max 属性属于 ProximitySensor 接口,它返回以 this 和 "max" 为参数调用 从最新读数获取值所得的结果。

6.1.3. near 属性

near 属性属于 ProximitySensor 接口,它返回以 this 和 "near" 为参数调用 从最新读数获取值所得的结果。

如果物理对象位于感测范围之外,该属性必须返回 null。

注:如果实现无法提供 near 值,则可以从 near 的值推断 distance。例如,如果 distance 不等于 max,则可以暗示 感测范围内存在物理对象。

7. 抽象操作

7.1. 构造接近传感器对象

输入

options,一个 SensorOptions 对象。

输出

一个 ProximitySensor 对象。

  1. 令 allowed 为以 ProximitySensor 调用 检查传感器策略控制 特性所得的结果。

  2. 如果 allowed 为 false,则:

    1. 抛出一个 SecurityError DOMException。

  3. 令 proximity_sensor 为新的 ProximitySensor 对象。

  4. 以 proximity_sensor 和 options 调用 初始化传感器对象。

  5. 返回 proximity_sensor。

8. 自动化

本节通过提供 Proximity Sensor 特定的虚拟传感器元数据, 扩展了 Generic Sensor API § 9 自动化。

按类型虚拟传感器元数据映射 必须具有以下条目:

键

"proximity"

值

一个虚拟传感器元数据,其读数解析算法为 接近读数解析算法。

8.1. 接近读数解析算法

输入

parameters,一个 JSON Object

输出

一个传感器读数或 undefined

  1. 令 reading 为一个新的传感器 读数。

  2. 令 keys 为列表 « "distance", "max" »。

  3. 对 keys 的每个 key执行:

    1. 令 value 为以 parameters 和 key 调用 解析单值数字读数 所得的结果。

      1. 如果 value 为 undefined。

        1. 返回 undefined。

    2. 将 reading[key]设置为 value[key]。

  4. 令 near 为以 "near" 从 parameters获取属性所得的结果。

    1. 如果 near 的类型不是 Boolean

      1. 返回 undefined。

    2. 将 reading["near"]设置为 near。

  5. 返回 reading。

9. 接近传感器的局限

由于大多数接近传感器会检测电磁辐射(例如红外光 或磁场),某些材料属性可能会干扰传感器 感知物理对象存在的能力。可能干扰 传感器的因素包括但不限于材料的半透明性、反射性、 颜色、温度、化学成分,甚至物理对象 将辐射反射回传感器的角度。因此,不应依赖接近传感器 作为测量距离的手段。从接近传感器唯一能够 推断出的是,某个物理对象以一定确定性位于 最小感测距离与最大感测距离之间的某处。

10. 致谢

感谢 Tobie Langel 在 Generic Sensor API 上的工作以及对本规范的意见。 感谢 Doug Turner 提供初始原型, 感谢 Marcos Caceres 提供测试套件。

11. 一致性

一致性要求通过描述性断言 与 RFC 2119 术语的组合来表达。本文档规范性部分中的关键词 "MUST"、 "MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、 "RECOMMENDED"、"MAY" 和 "OPTIONAL" 应按 RFC 2119 中的描述来解释。 但是,为了可读性,这些词在本规范中并非全部以大写 字母出现。

本规范的所有文本都是规范性的,除非某些章节 明确标记为非规范性、示例和注释。[RFC2119]

一致性用户 代理必须实现本规范中列出的 所有适用于用户代理的要求。

本规范中的 IDL 片段必须按照 Web IDL 规范中对 符合要求的 IDL 片段所描述的方式解释。[WEBIDL]

索引

由本 规范定义的术语

由 引用定义的术语

参考文献

规范性参考文献

[ECMASCRIPT]
ECMAScript Language Specification. URL: https://tc39.es/ecma262/multipage/
[GENERIC-SENSOR]
Rick Waldron. Generic Sensor API. URL: https://w3c.github.io/sensors/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[PERMISSIONS]
Marcos Caceres; Mike Taylor. Permissions. URL: https://w3c.github.io/permissions/
[PERMISSIONS-POLICY-1]
Ian Clelland. Permissions Policy. URL: https://w3c.github.io/webappsec-permissions-policy/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[WEBDRIVER2]
Simon Stewart; David Burns. WebDriver. URL: https://w3c.github.io/webdriver/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

IDL 索引

[SecureContext, Exposed=Window]
interface ProximitySensor : Sensor {
  constructor(optional SensorOptions sensorOptions = {});
  readonly attribute double? distance;
  readonly attribute double? max;
  readonly attribute boolean? near;
};