id

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

id 清单成员用于指定 Web 应用程序的唯一标识符。

语法

json
/* Absolute URL */
"id": "https://example.com/myapp"

/* Relative URL */
"id": "myapp/v2"

/* URL with query parameters */
"id": "myapp?version=2&mode=trial"

id

一个字符串,形式为一个 URL。该 URL 必须与您 Web 应用程序的 start_url 同源。如果 id 是一个相对 URL,它将使用 start_url 的源进行解析。id 中的任何片段始终会被忽略。如果 id 未指定,或者其值在任何方面无效(例如,不是字符串、不是有效 URL、与 start_url 不同源),则将使用 start_url 的值。

描述

id 清单成员用作您 Web 应用程序的唯一标识符。它允许浏览器区分不同的应用程序。

  • 当浏览器遇到一个 id 与已安装应用程序不匹配的应用清单时,它会将该清单视为一个独立应用程序的描述,即使它与另一个应用程序由相同的 URL 提供服务。
  • 当浏览器遇到一个 id 与已安装应用程序的标识匹配的应用清单时,它会将新清单视为现有应用程序清单的替代,即使该应用程序提供的 URL 与之前安装的 URL 不同。

注意: 虽然 id 是像 URL 一样处理的,但它并不指向可以访问的资源,因此不要求它必须在应用程序的 范围 内。

id 还可以被收集 Web 应用列表的服务用来唯一标识应用程序。

用法说明

使用 id 成员时需要记住的几个要点:

  • 作为推荐实践,请使用前导 / 来指定 id 是一个根相对 URL 路径。
  • 由于 id 是相对于 start_url 的源解析的,因此 id 值如 ../foofoo/foo./foo 相对于源都会解析为相同的标识符。例如,如果 start_urlhttps://example.com/app/,所有这些 id 值都将解析为 https://example.com/foo/
  • 标准 URL 编码和解码规则适用于解析 id 值。
  • id 中的片段在处理过程中会被移除。例如,如果 id 设置为 foo#bar,它将被解析为 foo。同样,如果 id 未定义,并且 start_urlhttps://example.com/app/#homeid 将解析为 https://example.com/app/
  • id 中的查询参数会被保留并包含在最终解析的标识符中。

理解 id 解析

假设您应用程序的 start_urlhttps://example.com/my-app/home。下表演示了清单中不同的 id 值将如何解析:

清单中的 id 解析后的 id 解释
undefined https://example.com/my-app/home 默认为 start_url
"" https://example.com/my-app/home 空字符串解析为 start_url
/ https://example.com/ 根相对 URL
foo?x=y https://example.com/foo?x=y 相对于 start_url 源解析的相对路径,并保留查询参数
foo#heading https://example.com/foo 相对于 start_url 源解析的相对路径,并移除片段
https://anothersite.com/foo https://example.com/my-app/home 不允许跨域 URL,回退到 start_url
😀 https://example.com/%F0%9F%98%80 非 ASCII 字符已编码为 URL

示例

创建不同的应用版本

假设您创建了一个具有以下清单的 Web 应用程序:

json
{
  "name": "My Weather Application",
  "id": "https://example.com/weatherapp/v1",
  "start_url": "https://example.com/app"
}

如果您稍后创建此应用程序的另一个版本,并进行了重大更改,希望将其视为一个不同的应用程序,您可以这样添加清单:

json
{
  "name": "My Weather Application",
  "id": "https://example.com/weatherapp/v2",
  "start_url": "https://example.com/app"
}

在这种情况下,即使两个清单文件都由相同的 URL 提供服务,浏览器也会将新清单视为一个独立应用程序的描述,因为 id 是不同的。因此,用户可以同时安装这两个版本。

更新现有应用

考虑一种场景,您部署了一个具有以下清单的 Web 应用程序:

json
{
  "name": "My Weather Application",
  "id": "https://example.com/weatherapp/",
  "start_url": "https://example.com/old-app"
}

但是,您后来决定将应用程序移动到不同的路径。然后,您将更新清单如下:

json
{
  "name": "My Weather Application",
  "id": "https://example.com/weatherapp/",
  "start_url": "https://example.com/new-app"
}

浏览器会将此新清单视为对现有应用程序的更新,因为 id 值匹配。在这种情况下,用户将收到其现有应用程序的更新,而不是被提示安装一个新应用程序。

规范

规范
Web 应用清单
# id-member

浏览器兼容性

另见