# Manifest description：可选的应用商店文案

> description 清单字段是用于应用商店列表的可选文本；Chrome 自 88 版起支持，但 Firefox 和 Safari 均未实现该字段。

import CompatTable from '@components/CompatTable.astro';

**一句话：** 根据 MDN，`description` 清单字段"用于说明你的 Web 应用的核心功能"，
其值"会被应用商店和其他分发平台用来帮助用户理解你的应用是做什么的"，同时它也
"为已安装的应用提供无障碍描述"。

## 支持情况

<CompatTable feature="manifest-description" />

根据 MDN 的浏览器兼容性数据，Chrome 自 88 版起支持 `description`。Firefox 和
Safari 均未实现该字段；在 Firefox for Android 上，该属性可以正常解析但不产生任何
效果。

## 如何使用

```json
{
  "name": "My App",
  "description": "Track your habits and build streaks, even offline."
}
```

## 如何在运行时检测

MDN 指出，`description` "是补充性的元数据，不会影响应用的运行时行为或浏览器呈现
应用的方式"。无论是 MDN 正文还是其兼容性数据，都没有描述任何可供脚本查询"当前浏览
器是否会使用该字段"的方法——读取页面自身的清单只能确认站点声明了什么，无法确认浏览
器或应用商店是否会展示它：

```js
async function manifestDeclaresDescription() {
  if (typeof document === 'undefined') {
    // 回退：当前上下文中没有 manifest link 元素。
    return false;
  }
  const link = document.querySelector('link[rel="manifest"]');
  if (!link) return false;
  const manifest = await fetch(link.href).then((r) => r.json());
  return typeof manifest.description === 'string' && manifest.description.length > 0;
}
```

请只把它当作部署检查（清单是否携带了非空的 `description`？），而非支持性检查——它
无法告诉你浏览器或应用商店是否会真正使用这段文本。

## 实用清单

- 根据 MDN 的浏览器兼容性数据，Firefox 完全不支持 `description`——不要指望它会在
  那里显示出来。
- MDN 的数据指出，在 Firefox for Android 上，该属性能正常解析但不产生效果，因此仅
  靠校验无法发现它被忽略了。
- 根据同一份兼容性数据，Safari 同样未实现 `description`——完整的逐浏览器情况见上方
  表格。
- MDN 指出 `description` 是可选的，且"应用商店在展示你的应用时可能不会使用这段文
  本"，因此不要把它当作你能掌控的唯一应用商店文案渠道。

## 相关参考

- [Web App Manifest: related_applications / prefer_related_applications 支持情况](/zh/compatibility/manifest-related-applications/)
- [Manifest scope：你的 PWA 安装边界](/zh/reference/manifest/scope/)