# 卸载已安装的 PWA

> chrome://apps、edge://apps、Windows 设置、macOS 应用程序文件夹与 iOS 主屏幕分别把卸载操作放在哪里，以及卸载移除了什么。

卸载已安装的 web 应用是一项按平台进行的操作，在安装它的浏览器里或操作系统的应用列表中完成，而且移除的不只是图标：standalone 窗口注册、文件处理器与协议处理器注册，以及视平台而定的应用存储都会被移除。桌面端的 Chrome 与 Edge 在 `chrome://apps`、`edge://apps` 以及应用窗口自己的菜单中暴露该操作；Windows 在设置 › Apps 中列出 Chromium web 应用；iOS 上的 Safari 像删除其他应用一样删除主屏幕 web 应用；macOS 14 及以后的 Safari 从应用程序文件夹移除 Dock web 应用（MDN "Installing and uninstalling web apps"、Microsoft Edge PWA 文档）。

## 工作原理

安装会把应用注册到操作系统（快捷方式或应用包、操作系统应用列表中的条目、可选的文件与协议处理器），卸载则通过平台提供的入口逆转这些注册。MDN 记载卸载"不止移除 PWA 的图标"，但没有逐条列举；各平台的入口如下：

| 平台 | 卸载操作的位置（英文界面） | 站点数据的去向 |
|---|---|---|
| Chrome，桌面端 | `chrome://apps` › 右键 › **Remove from Chrome…**；或应用窗口的三点菜单 › **Uninstall [应用名]…** | 复选框 **Also clear data from Chrome (…)** 提供删除该源存储的选项；不勾选则数据留在 Chrome 配置文件中 |
| Edge，桌面端 | `edge://apps` › 应用的 **…** 菜单或 Details › **Uninstall**；或应用窗口的 **…** 菜单 | 与 Chrome 相同的复选框模式 |
| Windows 10 与 11 | 设置 › Apps › Installed apps 把 Chromium web 应用与原生应用并列，发布者为安装它的浏览器；那里的 **Uninstall** 会转交给浏览器 | 由浏览器的对话框决定 |
| macOS 14+ Safari web 应用 | 在访达中把应用从 `~/Applications/` 拖到废纸篓 | web 应用的独立数据存储随之移除 |
| iOS 与 iPadOS 16.4+ | 长按图标 › **Remove App** › **Delete App**；**Remove from Home Screen** 则把应用保留在 App 资源库 | 删除应用会删除它的隔离存储；Safari 标签页中同一源的数据不受影响 |
| Android，Chrome WebAPK | 设置 › 应用 › 该应用 › **Uninstall**，或把图标拖到 **Uninstall** | Chrome 保留该源在浏览器配置文件中的存储；WebAPK 本身没有独立存储 |

由于安装归属于执行它的浏览器，移除一个浏览器的副本不影响另一个（N+1 问题）；页面也没有自身被卸载的事件：`appinstalled` 没有对应物，所以登出、推送订阅清理与服务端设备记录都无法由卸载本身触发。实际后果是一个取舍：要么不存放需要清理的东西（会过期的令牌、推送以 `410 Gone` 失败时在服务端剪除的订阅），要么接受被卸载的应用会留下陈旧记录。

## 实测行为

以下标签来自各平台的英文界面以及"另请参阅"中列出的厂商文档。

:::observed
在 macOS 与 Windows 上的 Chrome（英文界面）中，已安装应用窗口的三点菜单包含 "Uninstall [应用名]…"，确认后打开标题为 "Uninstall "[应用名]"?" 的对话框，带有复选框 "Also clear data from Chrome ([源])"；从 `chrome://apps` › 右键 › "Remove from Chrome…" 出现的是同一个对话框。在 iOS 16.4 及以后（英文界面），长按主屏幕 web 应用显示 "Remove App"，随后的面板提供 "Delete App" 与 "Remove from Home Screen"；对主屏幕书签（iOS 16.4 至 18 上未以 web 应用模式添加的站点），面板则显示 "Delete Bookmark"，这正是 WebKit 在 16.4 Web Push 文章中区分 web 应用与书签的那条界线。
:::

Edge 文档记载的路径（`edge://apps` › Open › Details › Uninstall）最终进入同一个由浏览器拥有的对话框，Windows 的设置 › Apps 也是转交给它而不是自己删除文件。页面检测不到以上任何一步；`getInstalledRelatedApps()` 只在相关应用仍处于安装状态、来自同一浏览器且 manifest 列出了它时才报告其存在，所以结果从一项变为零是最接近的信号，而且只能在下一次于标签页中访问时观察到。

## 另请参阅

- [Installing and uninstalling web apps](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Guides/Installing)（developer.mozilla.org）
- [The UX of PWAs in Microsoft Edge](https://learn.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/ux)（learn.microsoft.com）
- [Web Push for Web Apps on iOS and iPadOS](https://webkit.org/blog/13878/web-push-for-web-apps-on-ios-and-ipados/)（webkit.org）
- [N+1 安装问题](/zh/reference/installation/n-plus-one/)
- [桌面端安装](/zh/reference/installation/desktop-install/)
- [iOS 添加到主屏幕](/zh/reference/installation/ios-add-to-home-screen/)
- [getInstalledRelatedApps()](/zh/reference/installation/get-installed-related-apps/)