语法
json
/* Absolute URL */
"id": "https://example.com/myapp"
/* Relative URL */
"id": "myapp/v2"
/* URL with query parameters */
"id": "myapp?version=2&mode=trial"
值
描述
id
清单成员用作您 Web 应用程序的唯一标识符。它允许浏览器区分不同的应用程序。
- 当浏览器遇到一个
id
与已安装应用程序不匹配的应用清单时,它会将该清单视为一个独立应用程序的描述,即使它与另一个应用程序由相同的 URL 提供服务。 - 当浏览器遇到一个
id
与已安装应用程序的标识匹配的应用清单时,它会将新清单视为现有应用程序清单的替代,即使该应用程序提供的 URL 与之前安装的 URL 不同。
注意: 虽然 id
是像 URL 一样处理的,但它并不指向可以访问的资源,因此不要求它必须在应用程序的 范围 内。
id
还可以被收集 Web 应用列表的服务用来唯一标识应用程序。
用法说明
使用 id
成员时需要记住的几个要点:
- 作为推荐实践,请使用前导
/
来指定id
是一个根相对 URL 路径。 - 由于
id
是相对于start_url
的源解析的,因此id
值如../foo
、foo
、/foo
和./foo
相对于源都会解析为相同的标识符。例如,如果start_url
是https://example.com/app/
,所有这些id
值都将解析为https://example.com/foo/
。 - 标准 URL 编码和解码规则适用于解析
id
值。 id
中的片段在处理过程中会被移除。例如,如果id
设置为foo#bar
,它将被解析为foo
。同样,如果id
未定义,并且start_url
为https://example.com/app/#home
,id
将解析为https://example.com/app/
。id
中的查询参数会被保留并包含在最终解析的标识符中。
理解 id
解析
假设您应用程序的 start_url
是 https://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 |
浏览器兼容性
加载中…