apple-mobile-web-app-capable="yes" 仅在用户从主屏幕图标启动时生效,普通 safari 标签页强制显示地址栏;其生效需 https、正确 viewport(含 viewport-fit=cover)、有效 apple-touch-icon 及手动添加到主屏幕;微信等 webview 完全忽略该 meta;manifest display 与之互不兼容;viewport-fit=cover 需配合 env() 函数适配安全区。

apple-mobile-web-app-capable 不是“让网页全屏”的开关,而是“允许全屏启动路径生效”的许可标记——它本身不触发任何 UI 变化,只在用户从主屏幕图标启动时才起作用。
为什么写了 apple-mobile-web-app-capable="yes" 页面还是带地址栏?
因为 Safari 普通标签页里打开的网页,无论 meta 怎么写,都强制显示地址栏和工具栏。apple-mobile-web-app-capable 只对「从主屏幕图标启动」的页面生效,此时 window.navigator.standalone 才为 true。开发调试时直接刷新 Safari 页面,standalone 一定为 false,这不是配置错误,是 iOS 的运行机制限制。
apple-mobile-web-app-capable 生效的硬性前提
缺一不可:
- 页面必须通过 HTTPS 提供(iOS 11.3+ 强制要求,HTTP 下即使添加到主屏幕,启动后也会降级回普通标签页)
-
<meta name="viewport" content="..., viewport-fit=cover">必须存在且语法正确(逗号分隔、无换行、等号前后无空格) -
<link rel="apple-touch-icon" href="icon.png">必须存在且返回 200,尺寸建议 ≥ 180×180px(否则 iOS 可能不显示「添加到主屏幕」入口) - 用户必须手动点击分享按钮 → 「添加到主屏幕」→ 回到桌面 → 点击图标启动(无法用 JS 调起面板,也无法检测是否已添加)
微信、QQ、钉钉等内置浏览器完全忽略该 meta
这些容器 WebView 不解析 apple-mobile-web-app-capable,哪怕 URL 是 HTTPS、viewport 写得再规范也没用。它们有自己的渲染策略和安全沙箱,不会进入 standalone 模式。如果你的目标用户大量使用微信访问,这个 meta 实际上就是无效的。
和 manifest.json 的 display 属性互不感知
iOS 16.4+ 开始支持 display: "standalone",但低版本 iOS(包括主流的 iOS 15.x)只认 apple-mobile-web-app-capable meta。两者不能混用替代,也不能叠加增强效果——manifest 里的设置对 Safari standalone 模式无影响,反之亦然。别指望加了 manifest 就能绕过 meta 配置。
真正容易被忽略的是:viewport-fit=cover 不等于“内容自动撑满”,它只是告诉浏览器“允许内容延伸到安全区”,后续必须用 env(safe-area-inset-top) 等 CSS 函数做布局适配;而 apple-mobile-web-app-status-bar-style 在 black-translucent 模式下会让内容默认顶到屏幕最顶端,顶部会被状态栏覆盖——这恰恰是开发者最容易漏掉 padding 或 margin 的地方。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











