渐进式 Web 应用的功能不仅仅是在屏幕上呈现内容或连接到 Web 服务。PWA 可以处理来自文件系统的文件,可以与系统的剪贴板交互,可以访问连接到设备的硬件等等。每个 Web API 都可用于您的 PWA,并且在您的应用安装后还有一些额外的 API 可用。
您可以使用 What Web Can Do Today 来了解每个平台上可能实现的功能。对于个别 API 或功能,您可以使用 Can I Use 或 MDN 上的浏览器兼容性表。
始终检查功能支持
PWA 中的第一个字母 P 代表渐进式 (progressive),它源于渐进增强和功能检测的思想。您不应期望您的应用在每台设备上的工作方式都相同。数十亿台设备在不同国家/地区的上下文和能力的多样性使 PWA 成为一个出色的平台,这要归功于它们的渐进性。
这意味着您需要分层开发您的应用,这些层可能并非在每台设备上都可用,并且在使用前检查可用性。
您需要使用 JavaScript 检查 API 是否存在,然后再使用它,或者询问 API 服务在该特定设备上是否可用。
强大的 Web
如今,Web 非常强大。例如
- 您可以使用 WebRTC、地理位置和推送消息构建超本地视频聊天应用。
- 您可以使应用可安装。
- 您可以使用 WebAssembly 添加视频效果。
- 您甚至可以使用 WebGL 和 WebXR 将其带入虚拟现实。
增强您的 PWA 功能
让我们将 PWA 功能 API 分为四组
- 绿色:技术上可行时,每个平台上的每种浏览器都可用的 API。其中大多数已经发布多年,被认为是成熟的,您可以放心地使用它们。此组中的一个示例 API 是地理位置 API。
- 浅绿色:仅在某些浏览器上可用的 API。考虑到某些平台上缺乏支持,它们在受支持的浏览器子组中成熟,因此您可以在这些浏览器上放心地使用该功能。此组中的一个示例 API 是 WebUSB。
- 黄色:实验性 API。这些 API 尚未成熟;它们仅在某些浏览器上可用,并且在测试或试验中。我们在实验章节中讨论了其中一些功能。
- 红色:您无法在 PWA 中使用的 API 组,并且添加它们的计划仍然是长期的。此组中的一个示例 API 是地理围栏。
绿色功能
以下是您可以在 PWA 中使用的一些最重要的功能列表。
基础功能
- 使用 Cache API 在本地缓存文件,如缓存章节中所见。
- 使用 Web Worker 在线程中执行任务,如我们在复杂性管理章节中所见。
- 在 Service Worker 中使用不同的策略管理网络请求,如Service Worker 章节中所见。
- 2D Canvas,用于使用 Canvas API 在屏幕上渲染 2D 图形。
- 2D 和 3D 高性能 Canvas,或 WebGL,用于渲染 3D 图形。
- WebAssembly,或 WASM,用于执行低级编译代码以提高性能。
- 实时通信,使用 WebRTC API。
- Web 性能 API,用于衡量和帮助提供更好的体验。有关更多信息,请参阅性能 API 指南。
- 使用 IndexedDB 和存储管理在本地存储数据,以查询配额和请求持久存储,如离线数据章节中所见。
- 低级音频,这要归功于 Web Audio API。
- 前台检测,使用 Page Visibility API。
- 网络通信,使用 Fetch API 和 WebSocket API。
硬件和传感器
- 地理位置,通过不同的提供商(例如卫星或 Wi-Fi)通过 Geolocation API 获取用户的位置。
- 摄像头和麦克风,使用 Media devices 接口接收来自摄像头和麦克风的媒体流。
- 传感器,使用 Sensors API 或旧版接口(例如 DeviceMotionEvent 和 DeviceOrientationEvent)收集来自加速度计、陀螺仪、磁力计等的实时信息。在 Safari 上,您需要使用非标准权限对话框请求才能使用它们。
- 触摸和指针,借助 Pointer events 和 Touch events,访问有关您用手指、鼠标、触控板或笔进行的所有触摸和基于指针的点击的信息。
- 游戏手柄,使用 Gamepad API 读取来自连接到设备的标准游戏手柄和操纵杆的信息。
- 生物特征认证(例如面部或指纹识别),使用 Web Authentication 或 WebAuthn。
操作系统集成
- 语音合成和语音识别,使用平台安装的语音与用户交谈,并识别用户所说的内容,这要归功于 Web Speech API。
- 共享内容,从您的 PWA 到设备上的其他应用和位置,这要归功于 Web Share API,我们将在操作系统集成章节中看到这一点。
- 访问剪贴板,以不同的格式保存和检索剪贴板中的内容,这要归功于 Clipboard API,正如我在操作系统集成章节中展示的那样。
- 管理用户凭据和密码,使用 Credential Management API。
- 启用画中画,在操作系统中使用 picture-in-picture API 播放视频。
- 以全屏模式渲染内容,这要归功于 Fullscreen API,正如我在Windows 章节中展示的那样。
浅绿色功能
以下是您可以在 PWA 中使用的一些最重要的功能列表,但需要注意的是,它们可能并非在每种浏览器上都可用。
基础功能
- WebGL 2.0,WebGL 规范的新版本,以匹配 OpenGL 3.0。
- 编解码器,对视频流的各个帧和音频块的低级访问;对于需要完全控制媒体处理方式的 Web 应用程序非常有用,通过 Web Codecs API。
硬件和传感器
- 高级摄像头控件,除了媒体 API 外,还可以访问 平移、倾斜和缩放控件。
- 低功耗蓝牙,使用 Web Bluetooth API 与用户附近的低功耗蓝牙设备通信。查看通过 JavaScript 与蓝牙设备通信以获取更多信息。
- 近场通信,通过轻量级 NFC 数据交换格式 (NDEF) 消息(例如 NFC 标签或卡)使用 WebNFC API 通过 NFC 交换数据。您还可以阅读 在 Android 版 Chrome 上与 NFC 设备交互 以了解更多详细信息。
串行外围设备,用于低级访问使用串行端口、USB 或蓝牙串行连接到设备的设备,使用 Web Serial WPI。在以下链接中,您可以学习如何从串行端口读取和写入数据。
USB 设备 访问,使用 WebUSB API 与通过 USB 连接的设备通信。查看 在 Web 上访问 USB 设备 以获取更多信息。
人机接口设备,让您的 PWA 可以与任何为人类交互准备的不常见设备交互,使用 WebHID API。查看有关连接到不常见 HID 设备的本指南。
- 环境光,除了 Sensors API 之外,还可以读取设备周围环境光的当前光照水平或照度。
- 振动,如果设备支持,则在发生某些事情时通过 Vibration API 为用户提供触觉反馈。
- 录制媒体,捕获 MediaStream 或 HTMLMediaElement 对象(例如
<video>
标签)生成的数据,以便进行分析、处理或保存到磁盘,这要归功于 MediaRecorder API。 - 应用屏幕唤醒锁,当您的 PWA 需要保持运行时,防止设备变暗或锁定屏幕,使用 Screen Wake Lock API。
- 虚拟现实,使您能够在 PWA 中使用头戴式耳机和其他设备,这要归功于 WebXR Device API。
- 增强现实,可以在您的 PWA 中以多种方式实现,例如使用 WebXR Device API 或 Safari Quick Look 应用(用于 AR 内容)。
- 检测不活跃用户,使用 Idle Detection API。
- 方向锁定,当 PWA 在屏幕上时,将方向锁定为纵向或横向,这要归功于 Screen Orientation API,或安装应用的 Web App Manifest 的
orientation
属性。 - 在投影仪和辅助显示器上呈现内容,这要归功于 Presentation API。
- 锁定指针,以接收来自指针(鼠标、触控板和指针)的增量移动信息,而不是位置值——对于某些游戏很有用——这要归功于 Pointer Lock API。
操作系统集成
- 在设备上读取和写入文件,这要归功于 File System Access API,正如您在 操作系统集成 章节中看到的那样。
- 从其他应用获取内容,这要归功于 Web Share Target,正如我在 操作系统集成 章节中展示的那样。
- 获取联系人数据,使用 Contact Picker API,如 操作系统集成 章节所示。
- 在后台同步,当 PWA 未使用时,这要归功于 Background Synchronization API。
- 任务调度,当 PWA 未使用时,这要归功于 Web Periodic Background Synchronization API。
- 发送通知,使用 Web Push 和 Web Notifications API。
- 在后台传输文件,当用户未使用您的 PWA 时,这要归功于 Background Fetch API。
- 将您的媒体播放与操作系统集成,使用 Media Session API。
- 在您的 PWA 中管理付款,这要归功于 Payment Request API。Apple 还提供了基于 Payment Request API 之上的 Apple Pay JS 库。
- 查询网络状态,例如连接类型 (4G、WiFi) 和“节省数据”标志,使用 Network Information API。
- 捕获用户屏幕,用于截屏或屏幕共享,使用 Screen Capture API。
- 检测形状,使用设备上硬件加速的检测器,包括条形码(人脸和文本 OCR 仍在开发中),使用 Shape Detection API。
- 查询设备内存,使用 Device Memory 接口。
- 基于短信的一次性密码,让您使用 WebOTP API 自动接收从您的服务器通过短信发送的代码。Safari 实现了基于
<input>
元素的解决方案子集。在 WebKit 的博客中阅读更多相关信息。 - 管理移动设备屏幕上出现的虚拟键盘,使用 Virtual Keyboard API。