跳转到内容

macOS 上的 Safari PWA(Dock 应用)

发布于

一句话: 自 macOS Sonoma 搭配 Safari 17 起,网站可通过添加到程序坞作为 web 应用加入 Dock。它随后在自己的独立窗口中启动——没有 Safari 工具栏——拥有自己的图标,并且 (对已安装的 Dock 应用)支持通知与 Web Push。web 应用 manifest 让你控制该 Dock 应用的外观 与行为。

  • 添加到程序坞。 在 Safari 中打开站点后,选择文件 → 添加到程序坞(也可从共享菜单进入)。 Safari 会创建一个独立的 web 应用并将其放入程序坞;它同时出现在启动台 / 应用程序中。
  • 对任何站点都有效。 无需 manifest 即可把站点加入程序坞——Safari 会推导出名称和图标。 manifest 让你控制结果(见下)。
  • 由用户发起。 据 WebKit,由用户自行决定哪些成为 web 应用——他们自己发起“添加到程序坞”。

当存在 web 应用 manifest 时,Safari 用它来定制已安装的应用。据 WebKit 的 Safari 17 说明, manifest 可设定应用的显示模式、名称、主题色与起始 URL——因此一份完整的 manifest 会产出一个带品牌、为目的而建的 Dock 应用,而非 Safari 推导出的快捷方式。

  • 独立窗口。 应用在自己的窗口中打开,没有 Safari 工具栏,使用你的 manifest 身份。
  • Service worker。 Service worker 用于缓存与离线支持,受 WebKit 的生命周期与存储规则约束。
  • 通知与 Web Push。 已安装的 Mac web 应用支持 Notifications API 与 Web Push,因此能像原生 Mac 应用那样再触达用户。
  • 系统集成。 应用表现得像 Mac 应用:拥有自己的 Dock 图标、应用切换器条目与窗口管理。

尽管二者都基于 WebKit,macOS 的 web 应用体验与 iOS 的“添加到主屏幕”不同:

  • 入口。 macOS 在桌面使用添加到程序坞(文件/共享菜单);iOS 在设备上使用添加到 主屏幕。
  • 形态。 macOS web 应用是可调整大小、具备完整窗口管理的桌面窗口;iOS 应用是全屏的移动 界面。
  • 共有的平台基础。 二者都运行于 WebKit,因此应围绕其存储模型与特性集来规划,而非假设仅 Chromium 拥有的能力。

Mac web 应用使用 WebKit 的按源存储。当所有源的总存储用量超过整体配额时,WebKit 可能按源 逐出数据;被标记为持久的存储不受此逐出影响。把缓存的数据视为可能被移除:在启动时重新校验 并重新同步重要数据,并把真相源保留在你的服务器上。

  • 提供完整 manifest。 给出 name、图标、display、主题色与 start_url,让 Dock 应用 带品牌且为目的而建。
  • 告诉用户如何安装。 用户通过文件 → 添加到程序坞添加应用,因此一条指向该菜单的简短 提示能帮助 macOS 访客发现它。
  • 不要假设持久化。 在要紧之处申请持久存储,并在启动时重新同步重要数据。
  • 在真实 macOS 上测试。 在实际的 Sonoma 或更新版本的 Safari 安装中,验证独立窗口行为、 推送与图标。