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

瀏覽器相容性

另見