地理定位

W3C 推荐标准

关于本文档的更多详细信息
此版本:
https://www.w3.org/TR/2024/REC-geolocation-20240916/
最新发布版本:
https://www.w3.org/TR/geolocation/
最新编辑草案:
https://w3c.github.io/geolocation/
历史:
https://www.w3.org/standards/history/geolocation/
提交历史
测试套件:
https://wpt.live/geolocation/
实现报告:
https://w3c.github.io/geolocation/reports/implementation.html
编辑:
Marcos Cáceres (苹果公司)
Reilly Grant (谷歌)
前编辑:
Andrei Popescu (谷歌公司)
反馈:
GitHub w3c/geolocation (拉取请求新问题打开的问题)
勘误:
存在勘误
浏览器支持:
caniuse.com

另见 翻译


摘要

地理定位提供与托管设备相关的地理位置信息的访问。

本文档状态

本节描述了本文档发布时的状态。当前的 W3C 发布的列表以及此技术报告的最新修订可以在 W3C 技术报告索引 中找到, 地址是 https://www.w3.org/TR/。

自从该规范在2022年9月1日成为 W3C 推荐标准以来,以下实质性的补充和/或修正已被提议:

更详细的变更列表可以在 D. 变更日志 部分找到。文档的审阅者可以通过其独特的样式识别候选的补充和/或修正。

本文档由 设备和传感器工作组Web应用工作组 发布为推荐标准,采用 推荐流程。它包含了 候选修订, 引入了自上次推荐以来的实质性更改和新特性。

W3C 推荐将此规范广泛部署为 Web 标准。

W3C 推荐标准是一种规范,经过广泛的共识构建后,由 W3C 及其成员支持,并且 工作组成员承诺为实现提供 免版税许可。 未来对该推荐的更新可能会包含 新特性

候选补充内容在文档中标记。

候选修正内容在文档中标记。

本文档是由 W3C 专利 政策下运作的各小组制作的。 W3C 维护有一个 关于任何专利披露的公开列表 (设备和传感器工作组),以及一个 关于任何专利披露的公开列表 (Web应用工作组) ,这些披露与每个小组的交付物有关;这些页面还包含 披露专利的说明。如果某个个人知道某个专利,并认为该专利包含 必要的专利声明 ,则必须根据 W3C 专利政策第6条进行披露。

本文档受 2023年11月3日的 W3C 过程文件约束。

1. 介绍

本节为非规范性内容。

地理定位 定义了一个与仅主机设备相关的位置 信息的高级接口。常见的位置来源包括全球定位 系统(GPS)和从网络信号推断的位置,例如 IP 地址、RFID、WiFi 和蓝牙 MAC 地址,以及 GSM/CDMA 蜂窝 ID,还有用户输入。该 API 本身与底层位置 信息源无关,并不保证返回设备的实际位置。

如果最终用户 授予权限地理定位

1.1 范围

本节为非规范性内容。

本规范仅提供一个脚本 API 用于检索与主机设备相关的地理位置 信息。地理位置数据以世界大地坐标系 [WGS84] 表示。它不包括 提供任何形式的标记语言,也不包括 定义一个新的 URL 方案来构建识别地理位置的 URL。

2. 示例

本节非规范性。

该API旨在支持“单次”位置请求和重复的位置更新。以下示例展示了常见的使用案例。

2.1 获取当前位置

本节非规范性。

请求用户的当前位置。如果用户允许,您将获得一个位置对象。

2.2 监视位置

本节非规范性。

请求能够监视用户的当前位置。如果用户允许,您将获得用户位置的持续更新。

2.3 停止监视位置

本节非规范性。

通过调用 clearWatch() 方法来停止监视位置变化。

2.4 处理错误

本节非规范性。

当发生错误时,watchPosition()getCurrentPosition() 方法的第二个参数会返回一个 GeolocationPositionError 错误对象,您可以根据它来找出可能出错的原因。

2.5 使用 maximumAge 作为缓存控制

本节非规范性。

默认情况下,API 总是尝试返回缓存的位置信息,只要它之前获取过位置。在这个示例中,我们接受一个位置,其年龄不超过 10 分钟。如果用户代理没有足够新的缓存位置对象,它将自动获取一个新的位置。

2.6 使用 timeout

本节非规范性。

如果你需要及时获取位置信息,你可以使用 PositionOptionstimeout 成员来限制你愿意等待的时间,以 获取位置

2.7 在第三方上下文中启用 API

本节非规范性。

默认允许列表中的 'self' 允许 API 在同源嵌套框架中使用,但禁止第三方内容使用该 API。

可以通过向 allow="geolocation" 属性添加到 iframe 元素来选择性启用第三方使用:

另外,可以通过指定 HTTP 响应头来在第一方上下文中禁用 API:

请参见 权限策略 了解更多有关 Permissions-Policy HTTP 头的详细信息。

3. 隐私考虑

本节非规范性。

本规范中定义的 API 用于检索托管设备的地理位置。在几乎所有情况下,这些信息也揭示了设备用户的位置,从而可能侵犯用户的隐私。

3.2 接收位置数据的隐私考虑

本节非规范性。

注意:开发者对这些敏感数据的责任

本节适用于“接收者”,通常指使用 地理位置 的开发者。尽管用户代理或本规范无法强制执行这些要求,但开发者需要仔细阅读本节并尽力遵守以下建议。开发者还需要意识到,他们所在司法辖区可能有关于用户位置数据使用和访问的隐私法。

接收者应该仅在必要时请求位置信息,并且仅将该信息用于为其提供信息的任务。接收者应在任务完成后销毁位置信息,除非用户明确允许保留该信息。接收者还需要采取措施保护这些信息免受未经授权的访问。如果位置信息被存储,用户应当有权更新和删除该信息。

位置数据的接收者应避免在未经用户明确同意的情况下转发位置数据。转发时应谨慎,并建议使用加密。

接收者应明确且显著地披露他们正在收集位置信息、收集的目的、数据的保留时间、数据的安全性、数据是否被共享以及如何共享、用户如何访问、更新和删除数据,以及用户关于数据的任何其他选择。这些披露需要包括对上述指南的任何例外的解释。

3.3 实施考虑

本节非规范性。

实施者应考虑以下可能会对用户隐私产生负面影响的方面:在某些情况下,用户可能会无意中授权用户代理向网站公开他们的位置。在其他情况下,托管在某个 URL 上的内容可能会发生变化,导致先前授予的位置权限不再适用,或者用户可能改变主意。

预测或防止这些情况本质上是困难的。缓解和深入的防御措施是实施者的责任,而本规范并未对其做出规定。然而,在设计这些措施时,实施者应当使用户意识到位置共享,并提供可以撤销权限的用户界面。

3.4 检查使用 API 的权限

地理位置是一个 默认的强大特性,由 名称 "geolocation" 标识。

检查权限 使用该 API 时,用户代理 可以 建议基于时间的 权限 有效期,例如 "24小时"、"1周",或者选择 永久记住该权限 授予 权限。然而,推荐 用户代理优先限制 权限 有效期 限制为单个会话:例如,可以一直有效,直到 环境设置对象 被销毁,最终用户 离开 当前 ,或相关的浏览器标签页被关闭。

4. 安全性考虑

在发布时,地理位置功能没有与之相关的安全性考虑。然而,建议读者阅读 3. 隐私性考虑

6. Geolocation 接口和回调

WebIDL[Exposed=Window]
    interface Geolocation {
      undefined getCurrentPosition (
        PositionCallback successCallback,
        optional PositionErrorCallback? errorCallback = null,
        optional PositionOptions options = {}
      );
    
      long watchPosition (
        PositionCallback successCallback,
        optional PositionErrorCallback? errorCallback = null,
        optional PositionOptions options = {}
      );
    
      undefined clearWatch (long watchId);
    };
    
    callback PositionCallback = undefined (
      GeolocationPosition position
    );
    
    callback PositionErrorCallback = undefined (
      GeolocationPositionError positionError
    );

6.1 内部插槽

Geolocation 的实例是使用以下表格中的内部插槽创建的:

内部插槽 描述
[[cachedPosition]] 一个 GeolocationPosition,初始化为 null。 它是对最后获得位置的引用,并充当缓存。用户代理 MAY 随时将 [[cachedPosition]] 清除,方法是将其重置为 null, 无论出于何种原因。
[[watchIDs]] 初始化为空的 列表, 包含 unsigned long 项目

6.2 getCurrentPosition() 方法

getCurrentPosition(successCallback, errorCallback, options)方法步骤如下:

  1. 如果 当前设置对象相关全局对象关联的 Document 不是 完全激活 如果 this相关全局对象关联的 Document 不是 完全激活
    1. 调用错误回调 errorCallbackPOSITION_UNAVAILABLE
    2. 终止此算法。
  2. 请求位置,传入 thissuccessCallbackerrorCallbackoptions

6.3 watchPosition() 方法

watchPosition(successCallback, errorCallback, options)方法步骤如下:

  1. 如果 当前设置对象相关全局对象关联的 Document 不是 完全激活 如果 this相关全局对象关联的 Document 不是 完全激活
    1. 回调错误,传递 errorCallbackPOSITION_UNAVAILABLE
    2. 返回 0。
  2. watchId 为一个 实现定义 unsigned long,大于零。
  3. 附加 watchIdthis[[watchIDs]]
  4. 请求位置,传递 thissuccessCallbackerrorCallbackoptionswatchId
  5. 返回 watchId

6.4 clearWatch() 方法

当调用 clearWatch() 时,用户代理 必须

  1. 移除 watchId此对象[[watchIDs]]

6.5 请求位置

请求位置,传入一个 Geolocation geolocation,一个 PositionCallback successCallback,一个 PositionErrorCallback? errorCallback,一个 PositionOptions options,以及一个可选的 watchId

  1. watchIDsgeolocation[[watchIDs]]
  2. documentgeolocation相关全局对象关联 Document
  3. 如果 document 不被允许使用 "geolocation" 特性:
    1. 如果传入了 watchId移除 watchIdwatchIDs
    2. 回调错误,传入 errorCallbackPERMISSION_DENIED
    3. 终止此算法。
  4. 如果 geolocation环境设置对象是一个非安全上下文
    1. 如果传入了 watchId移除 watchIdwatchIDs
    2. 回调错误,传入 errorCallbackPERMISSION_DENIED
    3. 终止此算法。
  5. 如果 document可见状态是 "hidden",则等待以下页面可见性更改步骤运行:
    1. 断言document可见状态是 "visible"。
    2. 继续下面的步骤。
  6. descriptor 成为一个新的 PermissionDescriptor,其name"geolocation"
  7. 并行
    1. 设置 permission请求使用权限 descriptor
    2. 如果 permission 是 "denied",则:
      1. 如果传入了 watchId移除 watchIdwatchIDs
      2. 回调错误,传入 errorCallbackPERMISSION_DENIED
      3. 终止此算法。
    3. 等待获取位置,传入 successCallbackerrorCallbackoptions,以及 watchId
    4. 如果没有传入 watchId,则终止此算法。
    5. watchIDs 包含 watchId 时:
      1. 等待地理位置的显著变化。何为地理位置的显著变化由实现决定。用户代理 可以对位置变化报告的频率施加限制。
      2. 如果 document 不是完全活动的,或者可见状态不是 "visible",则返回到上一步并再次等待地理位置的显著变化
        注意:位置更新仅限于完全活动的可见文档
      3. 等待获取位置,传入 successCallbackerrorCallbackoptions,以及 watchId

6.6 获取位置

获取位置,传入 PositionCallback successCallback,一个 PositionErrorCallback? errorCallbackPositionOptions options,以及一个可选的 watchId

  1. 如果传入了 watchId,且 this[[watchIDs]]包含 watchId,终止此算法。
  2. acquisitionTime 成为一个新的 EpochTimeStamp,表示当前时间。
  3. timeoutTimeacquisitionTimeoptions.timeout 的和。
  4. cachedPositionthis[[cachedPosition]]
  5. 创建一个实现特定的 timeout 任务,设置在 timeoutTime 过期时触发,期间尝试通过以下步骤获取设备的位置:
    1. permission 为获取 当前权限状态 "geolocation"
    2. 如果 permission 是 "denied":
      1. 停止 timeout
      2. 执行 用户或系统拒绝权限 失败处理步骤。
    3. 如果 permission 是 "granted":
      1. position 为 null。
      2. 如果 cachedPosition 不为 null,且 options.maximumAge 大于 0:
        1. cacheTimeacquisitionTime 减去 options.maximumAge 的值。
        2. 如果 cachedPositiontimestamp 的值大于 cacheTime,并且 cachedPosition.[[isHighAccuracy]] 等于 options.enableHighAccuracy
          1. 排队任务地理位置任务源,步骤为调用 successCallback,传入 « cachedPosition » 和 "report"。
          2. 终止此算法。
      3. 否则,如果 position 不是 cachedPosition,尝试从底层系统获取位置数据,在获取期间可以考虑 options.enableHighAccuracy 的值。
      4. 如果在获取期间 timeout 过期,或者获取设备位置失败:
        1. 停止 timeout
        2. 转到 处理失败
        3. 终止此算法。
      5. 如果从系统成功获取位置数据:
        1. positionData 为具有以下名称/值对的 映射,基于获取的位置数据:
          "longitude"
          表示地球表面经度坐标的 double,使用 [WGS84] 坐标系统。经度测量从本初子午线向东或向西的距离。
          "altitude"
          表示高度的 double?,以米为单位,相对于 [WGS84] 椭球体,或者为 null 如果不可用。高度测量距离海平面的高度。
          "accuracy"
          表示 95% 置信水平的非负值 double,以米为单位。精度表示测量坐标与实际位置的接近程度。
          "altitudeAccuracy"
          表示高度精度的非负值 double?,或者为 null 如果不可用,表示 95% 置信水平,以米为单位。高度精度表示测量的高度与实际高度的接近程度。
          "speed"
          表示速度的非负值 double?,以米每秒为单位,或者为 null 如果不可用。速度表示设备的移动速度。
          "heading"
          表示方向的值 double?,以度为单位,或者为 null 如果不可用或者设备静止。方向表示设备相对于真北的移动方向。
        2. 设置 position一个新的 GeolocationPosition,传入 positionDataacquisitionTimeoptions.enableHighAccuracy
        3. this[[cachedPosition]] 设置为 position
        1. position 设置为 一个新的 GeolocationPosition ,传递 acquisitionTimeoptionsenableHighAccuracy
        2. this[[cachedPosition]] 设置为 position
      6. 停止 timeout
      7. 排队任务地理位置任务源,步骤为调用 successCallback,传入 « position » 和 "report"。
    处理失败:
    • 如果获取位置失败,根据匹配失败的条件执行以下之一:
      用户或系统拒绝权限:

      回调错误,传入 errorCallbackPERMISSION_DENIED

      注意:浏览器权限与操作系统权限
      超时:
      回调错误,传入 errorCallbackTIMEOUT
      数据获取错误或其他原因:
      回调错误,传入 errorCallbackPOSITION_UNAVAILABLE

6.7 回调错误

当指示要回调错误时,给定一个 PositionErrorCallback? callback 和一个 unsigned short code

  1. 如果 callback 为 null,则返回。
  2. error 成为一个新创建的 GeolocationPositionError 实例,其 code 属性初始化为 code
  3. 排队任务地理位置任务源,步骤为调用 callback,传入 « error » 和 "report"。

7. PositionOptions 字典

WebIDLdictionary PositionOptions {
          boolean enableHighAccuracy = false;
          [Clamp] unsigned long timeout = 0xFFFFFFFF;
          [Clamp] unsigned long maximumAge = 0;
        };

7.1 enableHighAccuracy 成员

enableHighAccuracy 成员提供了一个提示, 表示应用程序希望接收最准确的位置信息。 此成员的目的是允许应用程序通知实现它们不需要高精度的地理定位修正,因此实现可以避免使用消耗大量电量的地理定位提供者(例如,GPS)。

注意: 关于 enableHighAccuracy 的警告

7.2 timeout 成员

timeout 成员表示获取位置的最大时间长度(以毫秒为单位),在此时间过后,获取位置会超时。

注意: 什么时候计算超时时间?

等待文档可见以及获取使用 API 的权限的时间不包括在 timeout 成员所覆盖的时间内。timeout 成员仅在开始获取位置时适用。

注意: 立即取消

7.3 maximumAge 成员

maximumAge 成员指示 Web 应用程序愿意接受缓存的位置信息,其缓存时间不超过指定的时间(以毫秒为单位)。

8. GeolocationPosition 接口

WebIDL[Exposed=Window, SecureContext]
        interface GeolocationPosition {
          readonly attribute GeolocationCoordinates coords;
          readonly attribute EpochTimeStamp timestamp;
          [Default] object toJSON();
        };

8.1 coords 属性

coords 属性包含地理坐标。

8.2 timestamp 属性

timestamp 属性表示获取位置信息时的时间。

8.3 toJSON() 方法

toJSON() 方法返回 GeolocationPosition 对象的 JSON 表示。

8.4 内部槽

GeolocationPositionError 的实例被创建时, 包含以下表格中的内部槽:

内部槽 描述
[[isHighAccuracy]] 一个 boolean 值,用于记录 enableHighAccuracy 成员的值,当此 GeolocationPosition创建时。

8.5 任务来源

以下 任务来源 由本规范定义。

地理定位任务来源
本规范使用它来排队非阻塞 PositionCallbackPositionErrorCallback,当执行 位置请求时使用。

9. GeolocationCoordinates 接口

WebIDL[Exposed=Window, SecureContext]
        interface GeolocationCoordinates {
          readonly attribute double accuracy;
          readonly attribute double latitude;
          readonly attribute double longitude;
          readonly attribute double? altitude;
          readonly attribute double? altitudeAccuracy;
          readonly attribute double? heading;
          readonly attribute double? speed;
          [Default] object toJSON();
        };

9.1 latitudelongitudeaccuracy 属性

latitudelongitude 属性是地理坐标, 以十进制度表示。 latitudelongitude 属性表示位置,指定为 WGS84 坐标系统中的角度实数。 accuracy 属性表示位置的精度半径,单位为米。

9.2 altitudealtitudeAccuracy 属性

altitude 属性表示位置的高度, 以 [WGS84] 椭球体为基准,以米为单位。

altitudeAccuracy 属性表示高度精度,单位为米(例如,10 米)。

9.3 heading 属性

heading 属性表示设备的行驶方向,单位为度,范围是 0° ≤ heading < 360°,相对于正北方向按顺时针方向计算。

9.4 speed 属性

speed 属性表示设备当前速度的水平分量的大小,单位是米每秒。

9.5 toJSON() 方法

toJSON() 方法返回 GeolocationCoordinates 对象的 JSON 表示形式。

9.6 构造一个 GeolocationPosition

一个新的 GeolocationPosition 是通过以下步骤使用一个 map positionDataEpochTimeStamp timestamp 和布尔值 isHighAccuracy 构建的:

  1. coords 成为一个新创建的 GeolocationCoordinates 实例。
  2. 对于每个 keyvaluepositionData 中:
    1. coords 的名为 key 的属性设置为 value
  3. 返回一个新创建的 GeolocationPosition 实例, 其 coords 属性初始化为 coordstimestamp 属性初始化为 timestamp,其 [[isHighAccuracy]] 内部槽位设置为 isHighAccuracy

一个新的 GeolocationPosition 是通过以下步骤使用 EpochTimeStamp timestamp 和布尔值 isHighAccuracy 构建的:

  1. coords 成为一个新创建的 GeolocationCoordinates 实例:
    1. 初始化 coordlatitude 属性为十进制度数的地理坐标。
    2. 初始化 coordlongitude 属性为十进制度数的地理坐标。
    3. 初始化 coordaccuracy 属性为非负实数。该值 应当 对应于纬度和经度值的 95% 置信水平。
    4. 初始化 coordaltitude 属性为大于 [WGS84] 椭球体的高度,或如果实现无法提供高度信息则为 null
    5. 初始化 coordaltitudeAccuracy 属性为非负实数,或者如果实现无法提供高度信息则为 null。 如果提供了高度精度信息,则 应当 对应于 95% 置信水平。
    6. 初始化 coordspeed 属性为非负实数,或者如果实现无法提供速度信息则为 null
    7. 初始化 coordheading 属性为角度值,或者如果实现无法提供航向信息则为 null。 如果设备静止(即 speed 属性为 0), 则将 heading 初始化为 NaN
  2. 返回一个新创建的 GeolocationPosition 实例, 其 coords 属性初始化为 coordstimestamp 属性 初始化为 timestamp,其 [[isHighAccuracy]] 内部槽位设置为 isHighAccuracy

10. GeolocationPositionError 接口

WebIDL[Exposed=Window]
        interface GeolocationPositionError {
          const unsigned short PERMISSION_DENIED = 1;
          const unsigned short POSITION_UNAVAILABLE = 2;
          const unsigned short TIMEOUT = 3;
          readonly attribute unsigned short code;
          readonly attribute DOMString message;
        };

10.1 常量

PERMISSION_DENIED(数值 1)
请求位置失败,因为用户拒绝使用API的权限或者请求是在 非安全上下文中发出的
POSITION_UNAVAILABLE(数值 2)
获取位置失败。
TIMEOUT(数值 3)
用户代理在指定的 timeout 时间内未能成功 获取位置

10.2 code 属性

code 属性返回它被 初始化为 的值(请参阅 10.1 常量 以了解可能的值)。

10.3 message 属性

message 属性是一个面向开发者的文本描述,用于描述 code 属性。

注意: 不要将 .message 显示给用户!

11. 权限政策

本规范定义了一个由标记字符串 "geolocation" 识别的 受政策控制的功能。它的 默认允许列表“self”

12. 一致性

标记为非规范性部分的部分,以及本规范中的所有编写指南、图表、示例和注释,都是非规范性的。本规范中的其他所有内容均为规范性的。

本文档中的关键字 MAY(可能)MUST(必须)RECOMMENDED(推荐)SHOULD(应该) 应按 BCP 14 [RFC2119] [RFC8174] 中所述进行解释,仅在它们完全以大写形式出现时,如此处所示。

A. IDL 索引

WebIDLpartial interface Navigator {
      [SameObject] readonly attribute Geolocation geolocation;
    };
    
    [Exposed=Window]
    interface Geolocation {
      undefined getCurrentPosition (
        PositionCallback successCallback,
        optional PositionErrorCallback? errorCallback = null,
        optional PositionOptions options = {}
      );
    
      long watchPosition (
        PositionCallback successCallback,
        optional PositionErrorCallback? errorCallback = null,
        optional PositionOptions options = {}
      );
    
      undefined clearWatch (long watchId);
    };
    
    callback PositionCallback = undefined (
      GeolocationPosition position
    );
    
    callback PositionErrorCallback = undefined (
      GeolocationPositionError positionError
    );
    
    dictionary PositionOptions {
      boolean enableHighAccuracy = false;
      [Clamp] unsigned long timeout = 0xFFFFFFFF;
      [Clamp] unsigned long maximumAge = 0;
    };
    
    [Exposed=Window, SecureContext]
    interface GeolocationPosition {
      readonly attribute GeolocationCoordinates coords;
      readonly attribute EpochTimeStamp timestamp;
      [Default] object toJSON();
    };
    
    [Exposed=Window, SecureContext]
    interface GeolocationCoordinates {
      readonly attribute double accuracy;
      readonly attribute double latitude;
      readonly attribute double longitude;
      readonly attribute double? altitude;
      readonly attribute double? altitudeAccuracy;
      readonly attribute double? heading;
      readonly attribute double? speed;
      [Default] object toJSON();
    };
    
    [Exposed=Window]
    interface GeolocationPositionError {
      const unsigned short PERMISSION_DENIED = 1;
      const unsigned short POSITION_UNAVAILABLE = 2;
      const unsigned short TIMEOUT = 3;
      readonly attribute unsigned short code;
      readonly attribute DOMString message;
    };

B. 索引

B.1 本规范定义的术语

B.2 通过引用定义的术语

C. 致谢

本节为非规范性内容。

本规范基于行业内的早期工作,包括Aza Raskin的研究、Google Gears地理定位API和LocationAware.org。

还要感谢Alec Berntson、Alissa Cooper、Steve Block、Greg Bolsinga、Lars Erik Bolstad、Aaron Boodman、Dave Burke、Chris Butler、Max Froumentin、Shyam Habarakada、Marcin Hanclik、Ian Hickson、Brad Lassey、Angel Machin、Cameron McCormack、Daniel Park、Stuart Parmenter、Olli Pettay、Chris Prince、Arun Ranganathan、Carl Reed、Thomas Roessler、Dirk Segers、Allan Thomson、Martin Thomson、Doug Turner、Erik Wilde、Matt Womer和Mohamed Zergaoui。

D. 更新日志

本节为非规范性内容。

自2021年首次公开工作草案以来,地理定位已进行以下规范性更改:

自2016年第二版发布以来,本规范已进行以下实质性更改:

查看 提交历史 获取完整的更改列表。

E. 参考文献

E.1 规范性参考文献

[hr-time]
高分辨率时间。Yoav Weiss。W3C。2023年7月19日。W3C工作草案。URL: https://www.w3.org/TR/hr-time-3/
[html]
HTML标准。Anne van Kesteren;Domenic Denicola;Ian Hickson;Philip Jägenstedt;Simon Pieters。WHATWG。Living Standard。URL: https://html.spec.whatwg.org/multipage/
[infra]
Infra标准。Anne van Kesteren;Domenic Denicola。WHATWG。Living Standard。URL: https://infra.spec.whatwg.org/
[Permissions]
权限。Marcos Caceres;Mike Taylor。W3C。2024年3月19日。W3C工作草案。URL: https://www.w3.org/TR/permissions/
[permissions-policy]
权限政策。Ian Clelland。W3C。2024年7月24日。W3C工作草案。URL: https://www.w3.org/TR/permissions-policy-1/
[RFC2119]
RFC中指示要求级别的关键词。S. Bradner。IETF。1997年3月。最佳当前实践。URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
RFC2119关键词的大小写歧义。B. Leiba。IETF。2017年5月。最佳当前实践。URL: https://www.rfc-editor.org/rfc/rfc8174
[webidl]
Web IDL标准。Edgar Chen;Timothy Gu。WHATWG。Living Standard。URL: https://webidl.spec.whatwg.org/
[WGS84]
1984年世界大地坐标系统(WGS 84)。国家地理空间情报局(Office of Geomatics)。2008年。URL: https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84