Copyright © 2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
本规范定义了一种基于 JSON 的文件格式,为开发者提供了一个集中存放与网页应用相关元数据的位置。这些元数据包括但不限于网页应用的名称、图标链接,以及用户启动网页应用时优先打开的 URL。Manifest 还允许开发者声明网页应用的默认屏幕方向,并可设置应用的显示模式(例如全屏)。此外,Manifest 允许开发者为网页应用设定“作用域”URL,从而限制 Manifest 的适用范围,并为其他应用实现网页应用的深度链接提供方法。
通过这些元数据,用户代理可以为开发者提供更接近原生应用体验的方式。
本节描述了本文档在发布时的状态。当前 W3C 发布列表和本技术报告的最新修订版可在 W3C 标准与草案索引中找到。
本文档由 Web Applications 工作组以 推荐标准流程发布为工作草案。
作为工作草案发布不代表 W3C 及其成员的认可。
本文件为草案,可能随时被更新、替换或废弃。除作为进行中的工作外,不应引用此文档。
本文件由遵循 W3C 专利政策的工作组编制。 W3C维护着 与本组交付成果相关的公开专利披露列表; 该页面还包括披露专利的说明。有个人实际知晓某专利并认为包含 必要权利要求时,须按照 W3C 专利政策第6节披露相关信息。
本文档受 2025年8月18日 W3C 流程文件管辖。
一个 应用清单 是一个 [JSON] 文档,其中包含网页应用启动时的启动参数和应用默认设置。
清单有一个关联的 清单 URL, 即用于获取 清单 的 [URL]。
清单 的根对象可以包含以下任意成员,所有成员都是可选的,且顺序不限。
background_color
dir
display
icons
id
lang
name
orientation
scope
short_name
shortcuts
start_url
theme_color
本节为非规范性内容。
本节展示开发者如何使用本规范的各项功能。
本节为非规范性内容。
下例展示了一个典型的 清单。
{
"lang": "en",
"dir": "ltr",
"name": "Super Racer 3000",
"short_name": "Racer3K",
"icons": [{
"src": "icon/lowres.webp",
"sizes": "64x64",
"type": "image/webp"
}, {
"src": "icon/lowres.png",
"sizes": "64x64"
}, {
"src": "icon/hd_hi",
"sizes": "128x128"
}],
"scope": "/",
"id": "superracer",
"start_url": "/start.html",
"display": "fullscreen",
"orientation": "landscape",
"theme_color": "aliceblue",
"background_color": "red"
}
本节为非规范性内容。
示例同时展示了如何使用 "manifest" 链接类型,以及如何通过其他
meta
与
link
元素,为网页应用提供备用名称和图标集。
<!doctype>
<html>
<title>Racer 3K</title>
<!-- 启动配置 -->
<link rel="manifest" href="manifest.webmanifest">
<!-- 旧版浏览器的备用应用元数据 -->
<meta name="application-name" content="Racer3K">
<link rel="icon" sizes="16x16 32x32 48x48" href="lo_def.ico">
<link rel="icon" sizes="512x512" href="hi_def.png">
本节为非规范性内容。
本节说明如何使用 icons 成员为网页应用声明一组图标。下例中,开发者对网页应用关联的图标进行了如下选择:
type 成员明确标记为 WebP。如果用户代理不支持 WebP,可回退到另一个同尺寸图标。该图标的 MIME 类型 可通过 HTTP 头确定,也可由用户代理在接收到图标的前几个字节后 嗅探 得出。
图标列表会提供给用户代理,用户代理会在不同场景和位置选择最合适的图标。
{
"icons": [
{
"src": "icon/lowres.webp",
"sizes": "48x48",
"type": "image/webp"
},{
"src": "icon/lowres",
"sizes": "48x48"
},{
"src": "icon/hd_hi.ico",
"sizes": "72x72 96x96 128x128 256x256"
},{
"src": "icon/hd_hi.svg"
}]
}
本节为非规范性内容。
下例中,开发者添加了两个快捷方式。假设清单的 URL 为 https://example.com/manifest.webmanifest:
{
"shortcuts": [
{
"name": "Play Later",
"description": "View the list of podcasts you saved for later",
"url": "/play-later",
"icons": [
{
"src": "/icons/play-later.svg",
"type": "image/svg+xml"
}
]
},
{
"name": "Subscriptions",
"description": "View the list of podcasts you listen to",
"url": "/subscriptions?sort=desc"
}
]
}
本节为非规范性内容。
scope 成员用于告知浏览器哪些文档属于网页应用,哪些不属于——即清单会“应用”到哪些页面上。
例如,{"scope": "/"} 表示清单适用于整个源站的所有文档。而 {"scope":
"/racer/"} 则表示只有 "/racer/" 路径下的文档才 在 scope 内:如
"/racer/race1.html"、"/racer/race2.html" 等都 在 scope 内,而
"/elsewhere/" 及根目录 "/" 都在“scope 外”,清单不会应用到这些路径的文档。仅支持一个 scope 路径。技术细节见 5.
导航作用域。
应用清单意味着清单中影响展示的成员会生效,比如显示模式 fullscreen 或设定屏幕方向。只要应用导航到 scope 内的 URL,浏览器就会持续应用清单。若导航到“scope 外”,清单就不再应用,浏览器会采用自己的默认设置。比如应用不再全屏,而是在普通标签页显示。实现细节由浏览器自行决定。技术细节见 1.17.5 应用清单。
最后,由于用户可能从任一源站文档安装网页应用,建议清单中始终声明 scope 成员。如果清单缺少 scope,则将 start_url 的路径作为后备。如果 start_url 也缺失,则使用安装网页应用的文档 URL 作为
scope。为避免导航行为异常,建议作者始终包含 scope,最好值为 "/"。
清单的
dir
成员指定了可本地化成员的默认
方向,这些成员属于清单。
dir 成员的值可以设置为某个
文本方向。
文本方向如下,它们表示 可本地化成员的值默认采用:
清单
的
lang
成员是一个字符串,形式为
语言标签,用于指定清单可本地化成员的语言。如果未指定 lang 成员,则语言视为未知。
指定语言可以提升用户体验,帮助用户代理选择最合适的处理方式或资源,例如字体、样式、断字或辅助功能的语音。
语言标签
是一个字符串,需符合 [BCP47] 中定义的
Language-Tag 产生式。
语言标签不区分大小写。示例标签包括 'fr'(法语)、'en-AU'(澳大利亚英语)、或
'zh-Hans-CN'(中国使用的简体中文)。
要处理
lang 成员,给定 有序映射
json 和 有序映射
manifest:
false,则返回。
清单
的
short_name
成员是一个字符串,
代表网页应用名称的简短版本。当没有足够空间显示完整名称时使用。
short_name 成员是一个 可本地化成员。
当处理清单时,使用 处理文本成员
算法来处理 short_name 成员。
清单
的
scope
成员是一个字符串,
表示该网页应用导航作用域的
应用上下文。
清单的
icons
成员指定了在各种上下文中用作
Web 应用程序图标表示的图像。
例如,它们可用于在其他应用程序列表中表示 Web 应用程序,
或将 Web
应用程序与操作系统的任务
切换器和/或系统偏好设置集成。
清单的
orientation
成员是一个字符串,它
用作 Web 应用程序所有默认屏幕方向的顶层
可遍历对象。可能的值为
OrientationLockType 枚举的值,在
本
规范中称为方向值
(即“any”、“natural”、“landscape”、“portrait”、“portrait-primary”、
“portrait-secondary”、“landscape-primary”或“landscape-secondary”)。
如果用户代理支持将orientation
成员的值用作默认屏幕方向,那么该值将
在 Web
应用程序的整个生命周期内用作默认屏幕方向(除非在运行时通过其他方式覆盖)。这
意味着,每当方向
被解锁 [SCREEN-ORIENTATION],或者顶层可遍历对象
被导航时,用户代理都必须将方向恢复为
默认屏幕方向。
虽然规范依赖 [SCREEN-ORIENTATION] 的
OrientationLockType,
但用户代理实现 [SCREEN-ORIENTATION] API 属于可选。当然鼓励支持 [SCREEN-ORIENTATION]
API。
某些 UI/UX 方面的考虑和/或平台约定意味着,
某些屏幕方向不能一起使用。哪些方向
和显示模式不能一起使用,由实现者自行决定。
例如,对于某些用户代理,在处于 browser 显示模式时,更改应用程序的默认屏幕方向可能没有
意义。
Web 应用程序运行后,可以通过其他方式更改 顶层可遍历对象的方向(例如通过 [SCREEN-ORIENTATION] API)。
清单
的
start_url
成员是一个字符串,
表示 启动 URL,即开发者希望用户代理在用户启动网页应用时加载的 URL(比如用户在设备的应用菜单或主屏幕点击网页应用图标时)。
start_url 成员仅为建议,用户代理 可以 忽略它,或让终端用户选择是否使用它。用户代理 可以 允许终端用户修改该
URL,例如创建网页应用书签时或之后的任何时候。
要处理
start_url 成员,给定 有序映射
json、有序映射
manifest、URL
manifest URL,以及 URL document URL:
start_url 跟踪
可以设想 start_url 被设计为指示应用是否从浏览器外部启动(如
"start_url": "index.html?launcher=homescreen")。这对分析及其他自定义有帮助。但也可能开发者把唯一标识用户的信息编码进
start_url,比如服务分配的标识符,如 "?user=123"、"/user/123/" 或
"https://user123.foo.bar"。这些属于指纹/隐私敏感信息,用户可能并不知情。
开发者使用 start URL 包含唯一标识用户的信息是很糟糕的做法,因为这会形成用户指纹,且用户清除站点数据时不会被清除。不过本规范无法实际阻止开发者这样做。
基于上面原因,建议用户代理在安装应用或之后任何时候允许用户检查并如有必要修改应用的 start URL。
用户代理 可以 提供其它防护措施。例如,若用户清除某源的站点数据,用户代理 可以 提供卸载该源下 scope 内的应用的选项,从而移除应用 start_url 中可能的指纹。
清单
的
id
成员是一个字符串,
表示应用的身份。身份以 URL 形式展现,并且与 start_url 同源。
标识被用户代理用来 在全局范围内唯一标识应用程序。当用户代理 看到某个 manifest 的标识与某个已安装应用程序 不对应时,它应当 将该 manifest 视为一个不同应用程序的描述,即使 它与另一个应用程序来自同一个 URL。 当用户代理看到某个 manifest,其中manifest["id"]与某个 已安装应用程序的标识相等(并且排除片段可选地设为 true)时, 它应当将此用作一个信号,表明 该 manifest 是对已安装应用程序 manifest 的替代, 而不是一个不同的应用程序,即使它 来自于与先前所见不同的 URL。
标识可被收集 Web 应用列表的服务用来 唯一标识应用。
manifest
的
theme_color
成员是一个可主题化成员,用作应用上下文的默认主题色。
什么是主题色在[HTML]中有定义。
如果用户代理采用theme_color
成员的值作为默认主题颜色,那么该颜色将用作
应用了该清单的所有顶层可遍历对象的主题颜色,其中该清单被应用。但是,如果某个文档
的URL
位于应用程序上下文的清单
的作用域内,并且该文档包含一个
meta
元素,且该元素的
name
属性为
“theme-color”,则用户代理可以覆盖
默认主题颜色。
但是,对于文档的
URL不位于作用域内的情况,用户代理不应
通过一个
meta
元素覆盖默认主题颜色,其中该元素的
name
属性为“theme-color”,因为应用程序
无法控制这些文档。
用户代理可以根据上下文忽略 主题色的alpha 通道,例如在大多数环境下,主题色不能是透明的。
实现者可以为支持 prefers-color-scheme 而覆盖 theme_color 成员值。
当处理清单时,使用 处理颜色成员
算法处理 theme_color 成员。
manifest
的
成员是一个
可主题化成员,描述网络应用的期望背景色。
它重复了应用样式表中已有的内容,
但可被用户代理用于在实际可用文件之前(无论来自网络获取还是磁盘读取),
绘制已知 manifest 的网络应用背景色。
background_color
background_color 成员仅用于提升网页应用加载时的用户体验,不得被用户代理作为样式表可用时的背景色。
实现者可以为支持 prefers-color-scheme 而覆盖 background_color 成员值。
当处理清单时,使用 处理颜色成员
算法处理 background_color
成员。
清单
的
shortcuts
成员是一个列表,
包含一组shortcut item,用于访问网页应用的关键任务。
快捷方式如何展示,以及展示多少,由用户代理和/或操作系统自行决定。
要处理
shortcuts 成员,给定 有序映射
json、有序映射
manifest,以及
URL manifest URL:
用户代理应当通过与主机操作系统应用图标上下文菜单一致的交互(如右键、长按)暴露快捷方式。用户代理应当按清单顺序渲染快捷方式。用户代理应当以与主机操作系统应用图标上下文菜单一致的方式表现快捷方式。用户代理可以为保持一致性或受主机系统限制而截断展示的快捷方式列表。
可本地化成员是一个清单成员,并且它可以被
本地化。该清单的每个可本地化成员都有一个
对应的
*_localized
成员,其中 * 表示该
成员名称。
语言映射 是一个有序映射,其键是一个 语言标签,其值是一个本地化值。 本地化值是按键所给语言进行本地化的内容。
赋给可本地化成员的值即是
默认表示。
*_localized 成员包含一个语言映射,该映射
为应用中的给定可本地化成员定义了
本地化值。用户代理应当使用用户的本地化
设置来选择其本地化值,其语言标签键
与用户偏好最匹配。当没有这样的本地化
值
可用时,使用默认表示。
本地化文本对象是一个有序映射,包含以下属性:
value
dir
(可选)
lang
(可选)
对于接受字符串的可本地化成员,*_localized成员的语言映射既可接受字符串,也可接受本地化文本对象作为本地化值。
当使用字符串,或本地化文本对象的dir成员缺失时,将应用默认方向(即清单中的dir成员)。
当使用字符串,或本地化文本对象的lang成员缺失时,将应用语言标签(即语言映射的key)。
要处理 *_localized 文本成员,给定有序映射 json、
有序映射 map、
字符串 member 和 文本方向
defaultDirection:
给定字符串或 有序映射localizedValue、字符串 defaultLanguageTag、有序映射 map、 字符串member,以及文本方向 defaultDirection时,处理本地化文本对象:
false,则返回。
对于接受列表形式图像资源的可本地化成员,*_localized成员的语言映射
接受列表形式的图像资源作为其本地化值。
要处理 *_localized 图片资源成员,给定
有序映射 json、
有序映射 map、字符串 member 和 URL manifest URL:
false,则继续。
manifest
的
color_scheme_dark
成员是一个有序映射,其键为可主题化成员,值为当操作系统使用深色主题时这些成员覆盖的颜色值。
可主题化成员是下列 manifest 成员之一:
当应用 manifest 且操作系统使用深色
颜色主题时,对于可主题化成员member中每个在
color_scheme_dark中存在的项,用户代理
应当使用color_scheme_dark[member]的值
替代member的值,除非用户偏好(例如无障碍设置)
具有更高优先级。
要处理 color_scheme_dark 成员,给定
有序映射 json,
有序映射
manifest 和 URL manifest URL:
用户代理必须支持 "manifest" 链接类型,以及获取和处理关联资源的相关步骤。
当被指示忽略时,用户代理必须视为导致该状态的清单、成员或值不存在。
下述算法提供一个处理扩展点:鼓励向清单添加新成员的其它规范在算法此处接入自身。 它们不应更改manifest对象中已有的值。
处理清单的步骤如下 算法所示。该算法接受一个 URL 文档 URL、一个 URL 清单 URL、一个 字节序列 bodyBytes,以及 client(一个 环境设置对象 或 null)。
dir 成员,传递
json 和 manifest。
lang 成员,传递
json 和 manifest。
*_localized 文本成员,
传递 json、
manifest、"name_localized" 和
manifest["dir"]。
*_localized 文本成员,
传递 json、
manifest、"short_name_localized" 和 manifest["dir"]。
start_url
成员,传递 json、
manifest、
manifest URL 和 document URL。
id 成员,传递 json 和 manifest。
scope 成员
,传递 json
、manifest 和
manifest URL。
display 成员
,传递 json 和 manifest。
*_localized 图片资源成员,
传递
json、manifest
、"icons_localized" 和 manifest URL。
color_scheme_dark 成员,传递 json、
manifest 和 manifest URL。
orientation 成员,传递 json、
manifest。
shortcuts
成员,传递 json、
manifest 和 manifest URL。
仅支持sRGB色彩,及用户代理能在无外部知识下转换为
sRGB的色彩(如 "AliceBlue")。
例如,lab(…) 或 color(display-p3, …) 能无外部知识转为
sRGB,但
color(--custom-profile, …) 需要寻找匹配的
"@color-profile" 规则,这在 manifest 中无法指定。
要处理颜色成员,给定有序映射 json、有序映射 map,和 字符串 member:
要处理文本成员,给定 有序映射 json、有序映射 map 和 字符串 member:
处理清单的步骤由 [HTML] 在处理
link
元素的步骤中调用,此时 client
是 文档的 相关设置对象。这些步骤 也可以
被用户代理调用,以在没有关联 文档 的情况下处理清单,此时 client 为 null。
在这种情况下,为了匹配[cite:HTML]中对等步骤做出的保证,用户代理应该确保过去至少某一时刻:
link
元素
linkElement,其
rel
为
manifest,
且其
href
解析为
manifest URL,并且
Origin为
document URL的源,并且其凭证模式被设置为
linkElement的
crossorigin
属性对应的CORS 设置属性凭证模式。
已处理的清单被应用于一个顶层可遍历对象, 这意味着清单的成员正在影响 顶层可遍历对象的呈现和/或行为。 每当创建一个顶层可遍历对象时,用户 代理在导航开始之前,可以 向其应用一个清单。
用户代理也可以向现有的 顶层可遍历对象应用一个清单。如果活动文档的 URL位于 清单的作用域内,则 现有的顶层可遍历对象将成为一个应用程序上下文。如果该URL不位于 作用域内,则产生的行为由实现定义。
已应用清单的顶层可遍历对象 称为应用程序 上下文。
也可以从一个顶层可遍历对象中取消应用已处理的清单。发生这种情况时, 该顶层可遍历对象 将不再是应用程序上下文。
如果创建应用程序上下文是因为
用户代理被要求导航到一个深层链接,则用户
代理必须立即导航到该深层链接,并将
historyHandling设置为“replace”。否则,在创建
应用程序上下文时,用户代理必须立即
导航到起始 URL,并将
historyHandling
设置为“replace”。
如
manifest
链接关系所规定,清单会在每次页面加载时
获取并处理。当处理清单成功时,用户代理
可以将更新后的
清单应用于与该应用程序关联的任何当前和未来应用程序上下文。
如果src成员已更改,用户代理应当认为清单图像资源
已更新。如果
src未更改,则在某些情况下,用户
代理可以下载
图像并检查视觉差异。
为了进行更新,以下成员属于 安全敏感成员,因为它们会在 安装期间以及启动界面上呈现:
short_name及其在
short_name_localized中的本地化表示,
icons及其在
icons_localized中的本地化表示,
name及其在
name_localized中的本地化表示。
清单的所有其他成员均被视为非安全敏感成员。
安全敏感更新是对 安全敏感成员的更新。相应地, 非安全敏感更新是 对 非安全敏感成员的更新。
在考虑类型为
清单图像资源(例如icons)的已更新安全敏感成员时,如果
用户代理发现图像在视觉上没有显著差异,则用户代理可以将其视为非安全敏感更新。
用户代理应当立即应用所有非安全敏感更新。
用户代理应当向用户呈现所有安全敏感更新,并在应用 更改之前要求用户给予明示许可。
无论文本方向如何,安全敏感成员都应当按照 [UTS55] 中所述,以 双向隔离的方式显示。
如果用户更改本地化设置,用户代理可以
自动将启动界面上可见的安全敏感成员
调整为
成员中指定的本地化表示。这些更改
应当在用户下次打开 Web 应用程序时
呈现给用户。
*_localized
每个 清单图像资源 都是一个 图像资源。清单图像资源的呈现上下文由关联的清单成员的语义决定(例如,icons 成员通常用于表示应用图标)。
清单图像资源 与普通 图像资源 的不同之处在于,它可以拥有一个额外的 purpose 成员。
用户代理 可以 修改与 清单图像资源 关联的图像,以便在显示给用户之前更好地匹配平台的视觉风格,例如通过圆角处理或用特定颜色绘制。建议开发者为这种情况准备图像资源,以避免通过颜色变化或裁剪角落而丢失重要信息。
要 获取清单图像资源,给定一个 清单图像资源 image 和一个 应用清单 manifest,返回 要么是 获取图像资源 的结果,要么返回 null:
src。
image”。
purpose
成员是一个
由空格分隔且互不相同的
无序令牌集合。允许的
值为图标用途。
当清单图像资源用作图标时, 开发者可以提示该图像旨在宿主操作系统的上下文中用于某种特殊 用途(即实现更好的集成)。 用户代理不应将图标用于其声明的图标 用途之外的用途。
例如,用途为“monochrome”的图标可以
用作具有纯色填充的徽章或固定图标,在视觉上
区别于应用程序的全彩图标。用户代理
将purpose成员的值用作
确定具有某一purpose的图标在何处以及如何显示的提示。除非
开发者另有声明,否则用户代理可以将图标用于任何用途。
图标用途如下:
purpose的地方自由显示该图标。
例如,具有“any”用途的清单图像资源
不会用于要求
“monochrome”的上下文中。
图标 用途列表是列表 « "monochrome", "maskable", "any" »。
如果一个图标包含多个用途,则它可以用于其中任意
用途。如果声明的用途均无法识别,则会完全忽略该
图标。例如,如果图标的用途为
"monochrome fizzbuzz",则它可以用作单色图标,
因为 "monochrome" 是有效用途。但是,如果图标只有
"fizzbuzz" 用途,则会被忽略。
要确定图像的用途,给定有序 映射 json:
用于管控用户代理
是否可以
获取图标图像的安全策略,由与 manifest 所有者的Document相关联的
img-src 指令 [CSP3] 管辖。
某些平台有自己的图标形状偏好,但由于网页应用需要跨平台兼容,可以通过添加 maskable 用途,指示图标可以由用户代理自定义遮罩。这样平台可以保证图标与整体视觉风格融合,还能在不同位置应用不同遮罩和背景色。
安全区是 maskable 图标内始终可见的区域,与用户代理偏好无关。安全区定义为以图标中心为圆心,半径为图标尺寸的2/5(40%)的圆。如果图标不是正方形,则取宽高较小值。
此区域中的所有像素都保证会在所有蒙版中显示。 安全区域之外的像素不保证会显示(但可以) 是否可见取决于所应用的蒙版。
用户代理可以应用任意大小的蒙版,从而使任何距离 中心点超过图像尺寸的 2/5(若非正方形,则取宽度和高度中的较小值) 的像素(即安全区域) 变为透明。
用户代理不得使安全区域内的任何像素 变为透明。
用户代理可以通过添加额外的内边距来放大图标。
如果图标包含透明像素,用户代理必须 将图标合成到由用户 代理自行选择的纯色填充(例如白色)上。
建议设计者避免在 可蒙版图标中使用透明像素。
保持内容在 安全区内,大多数图标上下左右约有10%的空白,无内容或仅有背景等非核心内容。建议开发者检查图标在只显示安全区时是否仍清晰。
某些平台要求图标以纯色填充显示,例如单一颜色,只有图标的透明度可在 manifest 中声明。由于网页应用需兼容多平台,可以通过添加 monochrome 用途,指示图标可由用户代理指定颜色。这样平台可保证图标风格统一,并在不同场景应用不同颜色和内边距。
当展示 monochrome 图标时,用户代理不得分别显示像素的红、绿、蓝分量。用户代理应当用像素原始 alpha 值显示,但红绿蓝值可自选。推荐用户代理为所有像素使用同一颜色值。
设计 monochrome 图标时可将所有像素设为黑色,仅用透明度形成图标剪影。
用户代理可以通过添加额外内边距放大图标。
用户代理可以在透明像素后添加任意颜色背景,并应当保证背景与图标有足够对比度。
每个 快捷方式项 是一个 有序映射,表示指向网页应用内关键任务或页面的链接。包含以下成员:
用户代理可以使用这些成员组装上下文菜单,在操作系统中用户与网页应用图标交互时显示。当用户从操作系统菜单调用快捷方式时,用户代理应当运行 启动快捷方式。
快捷方式项
的
short_name
成员是一个字符串,
表示快捷方式名称的简短版本,用于没有足够空间显示完整名称的场景。
short_name 成员是一个 可本地化成员。
快捷方式项
的
description
成员是一个字符串,
开发者可用来描述该快捷方式用途。用户代理可以向辅助技术展示该信息。
description 成员是一个 可本地化成员。
快捷方式项
的
icons
成员列出用于在不同场景下代表该快捷方式的图片。
当 快捷方式项 shortcut(拥有 manifest)被调用时,运行 启动网页应用的步骤,参数为 manifest 和 shortcut.url。
要处理快捷方式,给定有序映射 item,URL manifest URL,URL scope,以及 文本方向 defaultDirection:
*_localized 文本成员,传入item、
shortcut、"name_localized"以及defaultDirection。
*_localized 文本成员,传入item、
shortcut、"short_name_localized"以及defaultDirection。
*_localized 文本成员,传入item、
shortcut、"description_localized"以及defaultDirection。
*_localized 图像资源成员,传入item、
shortcut、"icons_localized"以及manifest
URL。
任何网站都是一个可安装的 Web 应用程序。
用户代理可以提供一种方式,使最终用户能够在其设备上安装 Web 应用程序,从而允许用户实例化一个新的顶层可遍历对象,并向其 应用清单的成员。
Web 应用程序一旦被安装,就称为已安装的 Web 应用程序:也就是说,清单的 成员或其默认值被应用于 Web 应用程序的顶层 可遍历对象。这将已安装的 Web 应用程序与传统书签区分开来,因为从 传统书签打开网页时,不会向其 应用清单的属性。
例如,在支持安装的用户代理上,可以通过一种对 最终用户而言与原生应用程序无法区分的方式呈现和启动 Web 应用程序:例如,在主屏幕、启动器或开始 菜单中显示为带有标签的图标。当启动 Web 应用程序时, 用户代理会在加载 起始 URL之前,向顶层可遍历对象 应用清单。这使用户代理 有机会应用清单中的相关值,并可能 更改 Web 应用程序的显示模式和屏幕方向。或者,同样作为示例,用户代理 可以将 Web 应用程序安装到用户代理自身的 书签列表中。
应用名称来自于
name 或 short_name
成员。用户代理应当先从对应的
成员解析本地化值。
*_localized
若 name 或 short_name
缺失、为空或类型错误,用户代理可以用 name 作为 short_name 的回退,或相反以 short_name 作为 name 的回退。
若 name 和 short_name
均缺失、为空或类型错误,用户代理可以回退到 Document 查找合适替代项(如用
application-name 替代 name 或 short_name)。或者用户代理应当分配一个平台约定的默认名称(如“未命名”)。或者可以允许终端用户输入文本作为 应用名称。
当 name 和 short_name 均存在时,具体使用哪一个由实现自行决定(例如 short_name 更适合图标下方空间)。
由操作系统或用户代理自行决定,运行 启动Web应用的步骤,传入 已处理清单。
这通常发生在用户从应用启动界面(如主屏、启动器或开始菜单)选择 已安装Web应用时。
启动Web应用 的步骤如下所示。该算法参数为 已处理清单 manifest,可选的 URL target URL,可选的 POST资源 POST resource,返回一个 应用上下文。
如果提供了 target URL,必须 位于scope内 (指manifest)。
其他规范可以用自己的步骤替换此算法。这种替换将作用于所有 启动Web应用的调用。
该算法可被替换,以便支持实验性 launch_handler manifest 字段控制所有Web应用启动行为。 替换算法默认会调用 创建新的应用上下文 ,但在特定条件下行为会不同。
创建新的应用上下文的步骤如下所示。 该算法参数为 已处理清单 manifest,可选 URL target URL,可选 POST资源 POST resource,返回一个 应用上下文。
建议为最终用户提供 安装 Web 应用程序能力的用户界面,也允许检查与该 Web 应用程序相关的图标、 名称、起始 URL、源等信息。 这是为了给最终用户一个机会,在安装之前有意识地决定是否批准, 并且可能修改与该 Web 应用程序相关的信息。这也给了 最终用户一个机会来辨别该 Web 应用程序是否在冒充 另一个 Web 应用程序,例如通过使用意外的图标或 名称。
建议用户代理阻止其他应用程序 确定系统上安装了哪些应用程序(例如,通过对用户代理缓存进行 时序攻击)。例如,这可以通过在 Web 应用程序已安装之后,使清单中链接的资源 (例如图标)从用户代理缓存中失效来实现——或者使用与常规 Web 浏览 不同的完全独立的缓存。
用户代理应当提供机制让用户移除已安装网页应用。
建议在卸载时,用户代理同时为用户提供撤销与应用相关的其他持久化数据和设置的机会,如权限和持久存储。
显示模式表示网页应用在操作系统上下文中的呈现方式(如全屏等)。显示模式对应于特定平台的用户界面(UI)习惯和功能。显示模式的 UI 约定仅供参考,具体解释由实现者自行决定。
本规范定义了以下显示模式:
fullscreen 显示模式与 Fullscreen API
Standard 独立无关。fullscreen 显示模式影响浏览器窗口全屏状态,而
[FULLSCREEN] API 仅作用于视口内元素。因此网页应用可设置 显示模式为 fullscreen,但
document.fullScreenElement 返回 null,fullscreenEnabled 返回
false。
一旦清单被应用于一个顶层可遍历对象,当前生效的 显示模式就是该顶层可遍历对象的已应用显示模式。出于安全原因,用户代理可以更改 已应用显示模式(例如,顶层 可遍历对象被导航到作用域之外),并且/或者用户代理 可以向用户提供切换到另一种显示模式的方法。
当缺少display成员,或者没有
有效的display成员时,用户代理使用browser 显示模式作为已应用显示模式。因此,
用户代理必须支持browser
显示模式。
每种显示模式都有一个回退链,即一组 显示模式列表。各自的回退链为:
确定Web应用所选显示模式的步骤 如下。该算法接收 已处理清单 manifest, 返回一个显示模式。
显示模式列表 为列表 « "fullscreen", "standalone", "minimal-ui", "browser" »。
用户代理必须在 display-mode 媒体特性中,反映 Web
应用的已应用
显示模式 [MEDIAQUERIES-5]。
用户代理会通过可由 CSS 或 JavaScript 访问的 display-mode 媒体
特性,暴露已应用显示模式——不
一定是
清单中声明的那个。注意,当清单未被应用时,此媒体
特性也会反映 Web 页面的其他显示模式。例如,如果最终用户将
页面置于全屏,则用户代理会通过 display-mode 媒体特性,将此更改反映到
CSS 和脚本。
本规范不直接处理高价值数据。 但是,已安装的 Web 应用程序及其数据可能被 视为“高价值”数据(尤其是从隐私角度来看)。
由于 Web 应用程序可以包含能够同时 与本地设备和远程主机交互的内容, 实现者需要考虑向远程主机 暴露私有信息所产生的隐私影响。缓解措施和 深度防御措施由实现负责, 本规范不作规定。但是,在设计这些 措施时,建议实现者让用户了解 信息共享情况,并提供可轻松访问的界面, 以便撤销许可。
建议用户代理防止其他应用程序 确定系统上安装了哪些应用程序(例如,通过 对用户代理缓存发起计时攻击)。例如,可以在 Web 应用程序被安装后,使清单所链接的资源 (例如图标)在用户代理缓存中失效,或者使用与 常规 Web 浏览所用缓存完全不同的缓存。
可以设想,快捷方式的url可能被
特意构造,以表明应用程序是从浏览器外部启动的
(例如,"url": "/task/?from=homescreen")。还可以
设想,开发者可能会将能够唯一标识用户的字符串编码到url中(例如,由服务器分配的
UUID)。这是用户可能未意识到的
指纹识别/隐私敏感信息,并且与编码到起始 URL中的标识符一样,在
用户清除站点数据时不会被清除。
由于清单格式为 JSON,并将使用 [UNICODE] 进行编码, 因此适用 [JSON] 和 [UNICODE-SECURITY] 中描述的安全注意事项。此外,由于 无法阻止开发者在 清单中包含自定义/不受约束的数据,因此实现者需要对其他方面 不受约束的成员类型值施加其自身 特定于实现的限制,例如防止拒绝服务 攻击、防止内存耗尽,或规避 特定于平台的限制。
Web 应用程序通常包含 ECMAScript、HTML、CSS 文件 和其他媒体,它们在沙盒环境中执行。因此, 实现者需要了解其所支持类型的安全影响。 具体而言,实现者至少需要考虑以下 规范中概述的安全影响:[CSS-MIME]、[ECMAScript-MIME]、[HTML]。
由于本规范允许在清单的 某些成员中声明 URL,因此实现者需要考虑 [URL] 规范中讨论的安全注意事项。 计划显示清单中找到的IRI 和IDNA地址的实现,强烈建议遵循 [UNICODE-SECURITY] 中给出的安全建议。
开发者需要了解整个
[CSP3]
规范中讨论的安全注意事项,尤其是与
为了内联
清单而将 data: 设为有效源有关的注意事项。
这样做允许将清单直接包含在文档本身中,
从而可能引发 XSS 攻击;最好完全避免
这种做法。
建议让最终用户能够 安装 Web 应用程序的 UI,也允许检查与该 Web 应用程序 有关的图标、名称、起始 URL、源等信息。 这是为了让最终用户有机会在安装 Web 应用程序之前, 有意识地决定是否批准,并可能修改 与该 Web 应用程序有关的信息。这也使 最终用户有机会辨别 Web 应用程序是否在仿冒 另一个 Web 应用程序,例如使用意料之外的图标或 名称。
Web 应用程序运行时,建议用户 代理向最终用户提供一种方式,以访问有关 Web 应用程序的 常见信息,例如源、起始和/或当前 URL、已授予的许可和关联的图标。如何向最终用户 公开这些信息由实现者决定。
此外,当应用一个将显示 模式设置为“browser”以外任何值的清单时, 建议用户代理向最终用户明确表明, 他们正在离开 Web 浏览器的常规浏览上下文。 理想情况下,启动 Web 应用程序或切换到 Web 应用程序的方式, 应与在宿主平台中启动或切换到其他 应用程序的方式一致。例如,使用长时间且明显的 动画过渡,或者朗读文本“正在启动应用程序 X”。
display成员允许源在一定程度上控制
用户代理的原生 UI。占据整个屏幕后,它可能会
尝试模仿另一个应用程序的用户界面。
'display-mode'媒体特性
[MEDIAQUERIES-5] 也助长了这种行为,脚本可以通过该特性获知
Web 应用程序的显示模式。
mime类型
application/manifest+json
是应用清单媒体类型。该mime类型和
.webmanifest 文件扩展名均已在互联网编号分配局
(IANA)
注册。
若清单传输协议支持 [MIME-TYPES] 规范(如HTTP),则建议清单使用应用清单媒体类型标记。
本规范中被标注为非规范性的章节,以及所有编写指南、图表、示例和注释,均为非规范性内容。除此之外的内容均为规范性内容。
本文档中的关键字 MAY、MUST、MUST NOT、OPTIONAL、RECOMMENDED、SHOULD 和 SHOULD NOT 应按照 BCP 14 [RFC2119] [RFC8174] 的描述进行解释,仅当这些词以全大写形式出现时,才按上述方式解释。
只有一种产品类别可以声称符合本规范:用户代理。
虽然本规范主要面向网页浏览器,但其他软件也可以以符合规范的方式实现本规范。例如,搜索引擎或爬虫可以查找并处理清单,以构建可安装网页应用的站点目录。
本节为非规范性内容。
本规范设计为可扩展。鼓励其他规范为清单定义新成员,但在这样做时请遵循本规范的约定。特别是,应使用 处理扩展点 挂钩到处理清单的步骤。并且,务必按照本规范规定的方式,明确写出你的成员处理步骤,以保持平台的一致性。
为方便社区查找扩展,请将你的扩展加入扩展注册表。
指定新成员时,不要覆盖或猴子补丁 本规范中的任何定义内容。也不要假设你的成员会在其他成员之前或之后被处理。请保持新成员及其处理原子且自包含。注意,实现可自由忽略其不支持或未识别的成员。
如编辑者在编写规范时,临时需要修补本规范以协助实现,请提交问题,让社区知晓编辑者的意图。
本节为非规范性内容。
虽然专有扩展并不理想,但实际上无法完全避免。如果用户代理选择解释清单JSON中未在本文件规定的成员,可以做,但需谨慎。
鼓励实现者在添加专有扩展时,考虑其是否有可能成为标准(即,是否有必要让其他平台上的第二个用户代理也能使用该成员,即使目前只有一个用户代理感兴趣)。如果确实如此,请以厂商中立方式设计API,并将其提案为标准。如果新成员是真正专有的(即只在专有生态系统中有意义),请采用本流程并以该专有生态系统的简称为前缀,以避免命名冲突。
不要使用计划后续移除的厂商前缀(这些前缀往往会永远保留)。只用当下及未来均有意义的前缀。
鼓励实现者将专有扩展加入我们的扩展注册表。这样社区可追踪厂商和/或Web社区定义和文档化的扩展。我们会定期考虑这些扩展是否标准化。
下方为三个假设专有扩展的示例。
{
...
"kpl_fancy_feature": "some/url/img",
"gmpc_awesome_thing": { ... },
"blitzly_site_verification": "KEY_9864D0966935"
...
}
在此示例中,我们故意选择了可能为外部站点或服务的(虚构)名称,而不是浏览器或浏览器厂商的名称。这些不是浏览器厂商的前缀,而是专有服务的前缀。
本节为非规范性内容。
Web Application Manifest 的若干成员可提供关于网页应用如何在数字商店、安装对话框或其它分发和营销场景中展示的元数据。为更好地支持上述用例,以下成员已被移至 Web App Manifest - Application Information:
categories
description
iarc_rating_id
screenshots
本节为非规范性内容。
关于为何本规范选择使用 JSON 而非 HTML meta/link 标签的详细讨论,可在 GitHub 和
www-tag
邮件列表中找到。下方为讨论中的关键要点简要总结。
本规范定义的文档格式为统一封装网页应用元数据提供了一种方式,旨在避免专有和 [HTML] meta/link 标签的现有问题。这些问题包括:
虽然本规范也可能带来新的问题,但将数据以清单形式外部化可以解决上述问题。这些问题的解决方式包括:
meta 标签值格式混乱且不一致的问题,尤其是标签值包含多个子值时。
此外,将目前基于 meta 标签的功能标准化到清单中,有助于解决专有和标准 [HTML]
标签功能重复的问题。当然,这取决于标准是否被浏览器实现并普及到用户。如果实现,Web社区或可废弃许多专有 meta 标签。关于专有标签的更多信息见 可安装Web应用的用例与需求。
最后,本规范并不使 [HTML] 的标准化方案失效。当清单缺少如 name 或 icons
成员时,用户代理可在清单所属的 [HTML] 文档中查找相关内容(甚至可回退到专有标签/元数据)。
本节为非规范性内容。
有兴趣验证清单文档的开发者可以在 schemastore.org 找到非官方的清单格式 JSON 架构。其采用 Apache 2.0 许可。该架构由 Mads Kristensen 友好维护。如果开发者 发现 JSON 架构存在任何问题,请在 GitHub 上的 SchemaStore 仓库中提交错误报告。
本节为非规范性内容。
预期作者将使用以下选项之一 对清单内容进行本地化:
作者可以使用相应的 *_localized
成员(例如 name_localized),为清单的可本地化成员提供本地化值。
各个本地化条目可以是字符串或本地化文本对象。本地化文本对象可以使用其
lang和
dir属性指定自身的自然语言和文本方向
元数据,从而覆盖清单范围的lang和
dir成员提供的任何默认值。
用户代理可以采用以下方式之一处理本地化值:
Accept-Language”标头 [RFC9110] 或自定义 HTTP 标头)。有关
更多详细信息和最佳实践,请参阅W3C
国际化文章使用 Accept-Language
设置区域设置和HTTP
标头、meta 元素和语言信息。
鉴于上述选项,开发者需要注意 与最终用户首选语言有关的隐私:当 最终用户已向 Web 应用程序明确表明其语言偏好时(即并非仅使用用户代理的默认语言 设置),通常不应通过网络以明文形式发送 最终用户的首选语言。这样做会泄露最终用户的 个人信息。因此,鼓励开发者 使用 [TLS],以降低其 Web 应用程序遭受普遍监控的可能性 [RFC7258]。
本文档旨在解决 可安装Web应用的用例与需求。
本规范未列出任何问题。
本节为非规范性内容。
以下是自首次公开工作草案以来的一些重大变更:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
本节为非规范性内容。
本文档引用了 [HTML] 规范的部分内容,遵循该规范的许可协议。
Dave Raggett 和 Dominique Hazael-Massieux 通过 HTML5Apps 项目为本规范做出了贡献。
Claudio Gomboli 提供了图标示例图片。
印第安纳大学布卢明顿分校的安全研究者通过报告与越界导航相关的潜在风险,为本规范做出了贡献。
*_localized
§1.15
application/manifest+json
§A.
background_color
§1.13
color_scheme_dark
§1.16
description
§3.3
display
§1.8
id
§1.11
orientation
§1.9
purpose
§2.1
scope
§1.6
shortcuts
§1.14
start_url
§1.10
theme_color
§1.12
url
§3.4
value
§1.15.1
CSS)
Document 接口
Document)
request)
request)
request)
request)
crossorigin 属性(用于 link
元素)
href 属性(用于 link
元素)
link
元素
meta
元素
name 属性(用于 meta
元素)
rel 属性(用于 link 元素)
meta/name)
src(用于 ImageResource)
set)
list)
list)
iteration)
map)
list)
list)
map)
map)
@media)
@media)
OrientationLockType 枚举
url)
url/equals)
url)
url)
url)
url)