接近传感器

W3C 工作草案,

关于本文档的更多信息
本版本:
https://www.w3.org/TR/2025/WD-proximity-20250212/
最新发布版本:
https://www.w3.org/TR/proximity/
编辑草案:
https://w3c.github.io/proximity/
以往版本:
历史记录:
https://www.w3.org/standards/history/proximity/
反馈:
public-device-apis@w3.org 主题填写为 “[proximity] … message topic …” (存档)
GitHub
编辑:
Anssi Kostiainen (英特尔公司)
Rijubrata Bhaumik (英特尔公司)
前任编辑:
Dzung D Tran (英特尔公司)
缺陷报告:
通过 w3c/proximity 仓库提交 GitHub 问题
问题跟踪:
问题列表
测试套件:
web-platform-tests(GitHub)

摘要

本规范定义了一种具体的传感器接口,以便在无需物理接触的情况下监测附近物体的存在。

本文档状态

本节描述了本文档于发布时的状态。当前 W3C 出版物和本技术报告的最新修订版可在 W3C 技术报告索引 https://www.w3.org/TR/ 查询。

本文档由 设备与传感器工作组 以工作草案形式根据推荐流程发布。本文档计划成为 W3C 推荐标准。

如果你希望对本文档提出意见,请发送邮件至 public-device-apis@w3.org订阅存档)。 邮件时请在主题中包括 “proximity”,推荐格式为 “[proximity] …评论摘要…”。欢迎提出各种意见。

作为工作草案发布,并不代表 W3C 及其成员的认可。该文件为草稿,可能随时被其他文档更新、替换或废止。除作为进行中工作外,不适合作为参考引用。

本文档由依据W3C 专利政策工作的工作组编写。 W3C 维护了与该组交付物相关的专利披露公开列表; 该页面还包含披露专利的说明。如任何人确知有专利并认为包含必要声明,须根据W3C 专利政策第6节进行披露。

本文档遵循 2023年11月3日 W3C 流程文件 管理。

设备与传感器工作组将在请求横向评审前针对 API 的安全与隐私部分进行自检并修订。已有的安全与隐私问题可供参考。

1. 介绍

接近传感器扩展了通用传感器 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. 安全与隐私考虑

接近传感器提供关于传感器与邻近物体距离的信息,因此,可能泄露敏感隐私信息,导致用户识别和/或设备指纹识别攻击。

为降低这些风险,用户代理应采用以下一种或多种缓解策略

这些缓解策略补充了通用传感器 API 中定义的通用缓解措施 [GENERIC-SENSOR]

4. 权限策略集成

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

5. 模型

接近传感器 传感器类型具有如下关联数据:

扩展传感器接口

ProximitySensor

传感器权限名

"proximity"

传感器特性名

"proximity-sensor"

权限撤销算法

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

默认传感器

设备的主接近检测器。

虚拟传感器类型

"proximity"

最新读数 对于 Sensor接近传感器类型包括三个条目,其 为 "distance"、"max"、"near",其distancemaxnear 值。

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 对象,用户代理必须调用构建 proximity sensor 对象抽象操作。

6.1.1. distance 属性

distance 属性返回用 this 和 "distance" 作为参数调用 get value from latest reading 的结果。

若物理对象超出感应范围,此属性必须返回 null。

6.1.2. max 属性

max 属性返回用 this 和 "max" 作为参数调用 get value from latest reading 的结果。

6.1.3. near 属性

near 属性返回用 this 和 "near" 作为参数调用 get value from latest reading 的结果。

若物理对象超出感应范围,此属性必须返回 null。

注意:如果实现无法直接提供 near 值,可以通过 distance 推断。例如,如果 distance 不等于 max,则表明感应范围内存在物体。

7. 抽象操作

7.1. 构建 proximity sensor 对象

input

options,一个 SensorOptions 对象。

output

一个 ProximitySensor 对象。

  1. allowed 为调用 check sensor policy-controlled features 并传入 ProximitySensor 的结果。

  2. 如果 allowed 为 false,则:

    1. 抛出 SecurityError DOMException

  3. proximity_sensor 为新创建的 ProximitySensor 对象。

  4. proximity_sensoroptions 调用 initialize a sensor object

  5. 返回 proximity_sensor

8. 自动化

本节通过提供接近传感器专用的虚拟传感器元数据扩展了通用传感器 API § 9 自动化

每种类型的虚拟传感器元数据 map 必须包含如下条目

key

"proximity"

value

一个虚拟传感器元数据,其读数解析算法proximity 读数解析算法

8.1. proximity 读数解析算法

input

parameters,一个 JSON Object

output

一个传感器读数undefined

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

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

  3. 遍历 keys 中每个 key

    1. value 为用 parameterskey 调用 parse single-value number reading 的结果。

      1. 如果 valueundefined

        1. 返回 undefined

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

  4. near 为用 "near" 从 parameters 取属性的结果

    1. 如果 near 类型不是布尔值

      1. 返回 undefined

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

  5. 返回 reading

9. 接近传感器的局限性

由于多数接近传感器依靠探测电磁辐射(如红外线或磁场),某些材料特性会影响传感器对物体的感应能力。可能影响传感器的因素包括但不限于材料的半透明性、反射性、颜色、温度、化学成分,以及物体反射辐射回传感器的角度。因此,接近传感器不应作为距离测量工具,唯一可以确定的是在最小至最大感应距离范围内一定有物体存在。

10. 致谢

Tobie Langel 为通用传感器 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 规范的相关要求进行解释。[WEBIDL]

索引

本规范定义的术语

引用中定义的术语

参考文献

规范性引用

[ECMASCRIPT]
ECMAScript 语言规范. URL: https://tc39.es/ecma262/multipage/
[GENERIC-SENSOR]
Rick Waldron. 通用传感器 API. URL: https://w3c.github.io/sensors/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 标准. Living Standard. URL: https://infra.spec.whatwg.org/
[PERMISSIONS]
Marcos Caceres; Mike Taylor. 权限. URL: https://w3c.github.io/permissions/
[PERMISSIONS-POLICY-1]
Ian Clelland. 权限策略. URL: https://w3c.github.io/webappsec-permissions-policy/
[RFC2119]
S. Bradner. 用于在 RFC 中指示需求等级的关键词. 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 标准. 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;
};