# iOS Safari 与主屏 Web 应用中的安装 API

> iOS 18.6.2 上，navigator.install、BeforeInstallPromptEvent 与 getInstalledRelatedApps 在 Safari 标签页和主屏 Web 应用中都不存在。

import LabEvidenceLine from '@components/lab/LabEvidenceLine.astro';
import LabHarnessLinks from '@components/lab/LabHarnessLinks.astro';
import LabResults from '@components/lab/LabResults.astro';
import LabBacks from '@components/lab/LabBacks.astro';
import LabProvenance from '@components/lab/LabProvenance.astro';

<LabEvidenceLine behaviour="install-apis-on-ios" locale="zh" />

Chromium 系浏览器允许页面用 `beforeinstallprompt` 触发或推迟安装，较新的提案又增加了 `navigator.install()`。我们在 2026-10-20 用 iPhone 16 Pro、iOS 18.6.2（22G100）检查了安装相关 API，Safari 标签页和两个主屏 Web 应用中都没有这些接口。

<span id="问题"></span>

iOS 上的 Safari 是否暴露可编程的安装 API（`navigator.install`、`BeforeInstallPromptEvent` 或 `onbeforeinstallprompt` 处理属性），或者 `navigator.getInstalledRelatedApps()`？在 Safari 标签页和主屏 Web 应用中各是怎样？

<span id="测了什么"></span>

## 标签页和应用中的特性检测

我们用仪器分别读取三种上下文的特性检测值。

- Safari 标签页使用 WebDriver 自动化窗口，打开四个页面（`/lab/device-tests/`、`/demo/`、`/reference/installation/ios-add-to-home-screen/` 和 `/lab/device-tests/t1/no-manifest/`），实验记录 N03 与 N06；
- 从主屏幕图标打开 OpenPWA 演示应用（N13）；
- 从主屏幕图标打开 PWA Lab 真机实验室测试工具（N18）。

各上下文都读取以下表达式。

- `'install' in navigator` 与 `typeof navigator.install`；
- `'BeforeInstallPromptEvent' in window` 与 `'onbeforeinstallprompt' in window`；
- `'onappinstalled' in window`；
- `'getInstalledRelatedApps' in navigator`。

演示页面还监听 `beforeinstallprompt` 并显示是否触发过，但没有页面尝试安装，测试只检查接口是否存在。

## 怎么运行

测试工具会直接打印这些值。因此不需要 Web 检查器。

1. 在 iPhone 的 Safari 中打开 `https://openpwa.net/lab/device-tests/`，滚到 Results panel（T5, T9, T10），读出与安装相关的几行，或点按 **Copy results as JSON**。
2. 点按分享，选**添加到主屏幕**，再点**添加**。从图标打开 **PWA Lab**，读出同样几行。
3. 也可以在 Safari 和已安装的演示应用中分别打开 `https://openpwa.net/demo/`，查看安装状态里的「Browser offered an install prompt (beforeinstallprompt)」一行。
4. 如需额外检查，可借助 Web 检查器，在两种上下文中求值 `'onappinstalled' in window`。

<LabHarnessLinks behaviour="install-apis-on-ios" locale="zh" />

## 结果

在 iOS 18.6.2（22G100）上，列出的安装 API 在标签页和两个主屏应用中都不存在（仪器读数，A；实验记录 N03、N13、N18）。`'install' in navigator` 为 false，`typeof navigator.install` 为 "undefined"，`'BeforeInstallPromptEvent' in window` 为 false，`'onbeforeinstallprompt' in window` 为 false，`'getInstalledRelatedApps' in navigator` 为 false。`'onappinstalled' in window` 在标签页中为 false（N03），在两个应用的原始读数中也为 false。演示页面在标签页和应用中对 `beforeinstallprompt` 显示的都是「Not fired yet」。

在这个版本的 Safari 中，安装只能由用户自己通过「分享 → 添加到主屏幕」完成。页面可以检测自己是否作为已安装应用运行（`display-mode: standalone`、`navigator.standalone`），但没有 API 可以发起或推迟安装，也没有 API 可以查询相关应用是否已安装。

<LabResults behaviour="install-apis-on-ios" locale="zh" />

<span id="文档怎么说"></span>

## BCD 与 WebKit 的安装支持记录

BCD 没有记录 iOS 版 Safari 对 `BeforeInstallPromptEvent` 的支持（[BeforeInstallPromptEvent.json](https://raw.githubusercontent.com/mdn/browser-compat-data/main/api/BeforeInstallPromptEvent.json)，github.com），它的 `api.Navigator` 文件中 `install` 与 `getInstalledRelatedApps` 也没有 Safari 支持（[Navigator.json](https://github.com/mdn/browser-compat-data/blob/main/api/Navigator.json)，github.com）。定义 `navigator.install()` 的 Web Install 提案是一份 WICG 草案（[Web Install](https://wicg.github.io/install-element/)，wicg.github.io）。WebKit 的 iOS 16.4 文章描述的添加方式是分享菜单中的「添加到主屏幕」（[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）。

实测与这些来源一致。BCD 的 iOS 版 Safari 单元格不区分标签页和主屏应用；本次运行显示两者中都没有这些 API，所以在 18.6.2 上上下文对它们没有影响。这些读数复现了文档记载的接口缺失，属于确认结果，不算新发现。

## 数据

这些值在研究的[数据包](/zh/research/2026-10-ios18-home-screen-web-apps/data/)中（CC BY 4.0）。标签页一侧在 `raw/2026-10-20-ios18.6.2-tab-lab.json`、`raw/2026-10-20-ios18.6.2-tab-demo.json`、`raw/2026-10-20-ios18.6.2-tab-ios-a2hs.json`（N03）和 `raw/2026-10-20-ios18.6.2-tab-t1-no-manifest.json`（N06）；演示应用在 `raw/2026-10-20-ios18.6.2-step09-app-demo.json`（N13）；PWA Lab 在 `raw/2026-10-20-ios18.6.2-step12-app-lab.json`（N18）。机器可读的运行记录在 [/lab/results.json](/lab/results.json) 中，id 为 `install-apis-on-ios/2026-10-20-ios-18.6.2-22g100`。

<span id="支撑的条目"></span>

## 相关参考条目

这一结果支撑 [beforeinstallprompt 事件](/zh/reference/installation/install-prompt/)、[navigator.install](/zh/reference/installation/navigator-install/) 和 [getInstalledRelatedApps()](/zh/reference/installation/get-installed-related-apps/) 条目中关于 iOS 的说法，以及安装提示兼容性数据中 iOS 版 Safari 一行。

<LabBacks behaviour="install-apis-on-ios" locale="zh" />

## 局限

- 仅在一天内由一名操作员测试一台 iPhone 16 Pro，系统仅有 iOS 18.6.2（22G100）这一个版本。
- 测的是接口是否存在，不是行为。理论上浏览器可以派发一个没有对应处理属性的事件；除演示页面外，没有单独用监听器检查 `beforeinstallprompt`。
- 标签页一侧的读数来自 WebDriver 自动化窗口；特性检测与它的空数据存储无关。
- 没有测试第三方 iOS 浏览器（T5b 没有运行）。Safari 26.0 改变了添加后站点的打开方式；这次在 18.6.2 上的运行不涉及 iOS 26 及以后的版本。
- iPadOS 和其他 iOS 版本均未测试，计划等这台设备升级到 iOS 27 后重跑。

<LabProvenance locale="zh" />