广泛部署的技术
可见性检测
页面可见性规范允许开发者检测他们的应用何时在前台,从而相应地调整他们的操作和资源消耗。
开发中的技术
打包
Web 应用清单允许开发者在单个 JSON 文件中提供有关 Web 应用的核心元数据(例如其名称、图标、首选启动 URL 和显示模式)。浏览器可以利用此信息来建议用户将应用安装在移动设备的主屏幕上(类似于原生应用),并创建更丰富的用户体验。
Web 应用清单——应用信息文档添加了一些新的属性,扩展了清单的格式,这些属性不会影响浏览器对已安装的 Web 应用的显示方式,但会为搜索引擎、应用程序目录和商店提供有用的元数据,例如应用类别、年龄等级和屏幕截图等。
除了Web通知以外,标记 API定义了另一种通知机制,允许已经安装在设备上的 Web 应用(例如通过清单文件)设置一个标记,通常显示在主屏幕上应用程序的图标旁边,在应用程序的状态发生变化时通知用户可能需要注意的信息(如新消息)。
离线 Web 应用
Service Workers 规范描述了一种方法,该方法使应用能够利用持久的后台处理,为离线运行应用打开了大门。
Service Workers 不仅可以使 Web 应用在离线或网络条件较差的情况下无缝地脱机工作,它还创建了一个模型可以使 Web 应用在浏览器窗口未打开,或者浏览器本身未运行时也能进行操作。这种能力为在后台运行 Web 应用打开了大门,并且可以对远程触发的事件作出反应。
远程通知
推送 API 使 Web 应用能够订阅远程通知,并在接收到后唤醒应用。长期以来,原生应用受益于这些通知带来的更多的用户参与。
内容分享
分享操作是移动设备上通过跨应用边界传递内容的常见范例,例如将 URL 或图像发布到自己最喜欢的社交网络应用中。Web分享API规范允许 Web 应用将文本、链接和其他内容分享到用户选择的任意目的地。该 API 是Web Intents提案的一个更有针对性的版本,Web Intents在2012年停止开发,部分原因是它的一般性引发了用户体验问题。
Web分享目标API建议允许Web应用在其应用清单中声明其可接收来自其他应用的内容。这允许用户选择安装的Web应用在分享菜单中被其他本地应用列出。
地理围栏
通过对后台操作的支持,地理位置传感器规范允许在设备进入指定的地理区域(也称为地理围栏)时唤醒Web应用。
特性 | 规范 / 小组 | 成熟度 | 现有实现选择浏览器… |
---|---|---|---|
打包 | Web Application Manifest Web 应用工作组 (Web Applications Working Group) | ||
Web 应用清单——应用信息 (Web App Manifest - Application Information) Web 应用工作组 (Web Applications Working Group) | |||
标记 API (Badging API) Web 应用工作组 (Web Applications Working Group) | |||
离线 Web 应用 | Service Workers 1 Service Workers工作组 (Service Workers Working Group) | 已有稳定实现: | |
远程通知 | 推送 API (Push API) Web 应用工作组 (Web Applications Working Group) | ||
内容分享 | Web 分享 API (Web Share API) Web 应用工作组 (Web Applications Working Group) | ||
Web 分享目标 API (Web Share Target API) Web 应用工作组 (Web Applications Working Group) | |||
地理围栏 | 地理位置传感器 (Geolocation Sensor) 设备与传感器工作组 (Devices and Sensors Working Group) | Polyfills |
探索性工作
打包
Web 打包文档描述了用于网站和应用的新包格式的用例,并概述了这种格式。
状态转换
无缝切换
很多网站会在其自己的用户界面内嵌入来自第三方来源的内容(例如新闻内容),或者将第三方内容加载到 iframe 中以提供更快、可靠的加载体验,这对于移动设备尤其重要。这种方法的一个主要缺点是不保留第三方的来源:只有第一方的来源出现在地址栏中,这使得用户难以识别他们正在浏览的内容的出处和可信度。另一个缺点是第三方页面无法利用附加到其源的客户端资源和权限。Portals是一个在网站或网页之间实现无缝切换的提案,它使一个页面能够嵌入另一个页面,并在嵌入状态和切换后的全屏状态之间无缝转换,从而解决上述源的问题。
后台执行
Web 后台同步规范建立在 Service Workers 之上,通过在后台运行网络操作,使 Web 应用能够无缝地保持用户数据的最新状态,从而适应用户在移动设备上可能经常遇到的不可靠的连接。
Background Fetch 定义了一个类似的基于 Service Workers 的后台下载和上传机制,但允许以用户可见的方式让操作在后台继续进行,即使是在用户关闭了所有浏览器窗口和 worker 的情况下。该规范专门用于支持下载和上传大型资源(如播客、电影、纹理)。
共享资源
一个应用可以一次运行多个 worker,并且一个应用的多个实例可以在单独的窗口中同时运行。Web 锁 API 允许此类应用获取锁并协调实例之间共享资源(例如存储)的使用。
MiniApps
MiniApps 是在具有混合原生和 Web 功能的宿主应用或操作系统中运行的一类应用形态。MiniApp 使用了 Web 技术(如 CSS 和 JavaScript)。出于性能或安全原因,一些通用 Web 技术在 MiniApp 上不可用(如 MiniApp 通常无法访问 DOM)。MiniApp 通常包含一些在原生应用(例如联系人 API 和地图)或开发框架(例如视图和页面路由)中更常见的特性。MiniApp 的信任模型与常规 Web 应用不同,因为 MiniApp 通常需要在宿主平台上进行审核和批准,然后用户才能访问它们。MiniApp 标准化白皮书回顾了 MiniApp 的潜在标准化领域。MiniApp 社区组负责培养更具体的需求文档和技术提案(URI Scheme、Lifecycle、Manifest、Packaging)。
特性 | 规范 / 小组 | 实现意向选择浏览器… |
---|---|---|
打包 | Web 打包 (Web Packaging) Web 平台孵化社区组 (Web Platform Incubator Community Group) | |
状态转换 | 页面生命周期 (Page Lifecycle) Web 平台孵化社区组 (Web Platform Incubator Community Group) | |
用户空闲检测 (User Idle Detection) Web 平台孵化社区组 (Web Platform Incubator Community Group) | ||
无缝切换 | Portals Web 平台孵化社区组 (Web Platform Incubator Community Group) | |
后台执行 | Web 后台同步 (Web Background Synchronization) Web 平台孵化社区组 (Web Platform Incubator Community Group) | |
Background Fetch Web 平台孵化社区组 (Web Platform Incubator Community Group) | ||
共享资源 | Web 锁 API (Web Locks API) W3C | 已有稳定实现: |
MiniApps | MiniApp Standardization White Paper version 2 MiniApps Working Group |
不再进行的工作
- 应用缓存
- 应用缓存机制是在HTML5中引入的。通过一个缓存清单,浏览器能够知道哪些文件需要被保留在缓存中,从而允许脱机访问Web应用。该特性已经被所有的主流浏览器实现,但存在安全问题,而且开发人员对缓存的控制极其有限,所以该功能在HTML 5.1中已不推荐使用,并于HTML 5.2中删除。Service Workers规范定义了一种更加强大的替代方法。
- 任务调度
- 任务调度 API 可以通过与 Web 应用关联的 service worker 在指定的时间触发任务。该规范属于现在已经关闭的系统应用工作组(System Applications Working Group)的范围,因此被搁置了。
- 地理围栏 API
- 地理围栏 API 可以在设备进入指定的地理区域时唤醒Web应用。这项工作已经停止,部分原因在于未能找到一种很好的方法来解决有关隐私的权限问题,还因为该 API 依赖于当时还不稳定的 Service Workers。通过对后台操作的支持,地理位置传感器规范现在提供了类似的功能。
- 后台执行控制
- 用户代理会限制 Web 应用在后台执行操作的能力,使应用可以执行的操作的控制权掌握在用户手中。Web预算API开发了一种机制,通过该机制,应用可以确定可在后台运行操作的成本和预算,从而允许他们决定是执行还是推迟这些操作。各种参数可能影响操作的成本,包括设备是否使用电池电源以及设备所连接的网络类型等。由于使用过少以及此API设计的问题,该提案被撤销。