让你的网页拥有原生应用的体验,快速上手 PWA 应用配置

本文主要讲述智能设备(安卓、iOS)配置 PWA ,可以令 web 应用使用上更像原生应用。影响 PWA 网页应用关键是以下三样东西:<mate><link> 以及 manifest.json 文件。

iOS PWA 应用

Android PWA 应用

标签属性

复习一下:HTML是一门标签语言

共有属性

ini 复制代码
<link rel="manifest" href="/manifest.json">
<link rel="icon" href="/img/norman-logo.png">

Apple 私有属性

参考:developer.apple.com

iOS 设备需要单独添加的属性,其中第一项 link 是设置启动图标,建议使用将透明的边缘都填满颜色,不然 iOS 能将其边缘填充为黑色 (注意:这样的图标看上去是相当难看)

ini 复制代码
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  • apple-mobile-web-app-capablecontent 有两个值 yesno,当我们需要显示工具栏和菜单栏时,这个行meta就不用加了,默认就是显示。
  • apple-mobile-web-app-status-bar-style :默认值为 default(白色),可以定为black(黑色)和 black-translucent(透明)。

注意: 若值为"black-translucent"将会占据页面px位置,浮在页面上方。

过渡页

  • 安卓手机只需要设置 manifest.json 中的 nameshort_nametheme_coloricons,即可自动匹配。

  • iOS 需要在 meta 中继续添加标签,还需要用到媒体查询的语法去适配,不然当尺寸不匹配时,效果将不生效。

使用 pwa-asset-generator 生成 PWA 配置

bash 复制代码
pwa-asset-generator ./icon.png

结果如下,可手动复制到对应的文件中,也可以根据命令生成文件,详细通过 pwa-asset-genrator -h 进行查看。

arduino 复制代码
saveImages Saved image apple-splash-2048-2732 🙌
saveImages Saved image apple-splash-2732-2048 🙌
saveImages Saved image apple-splash-1668-2388 🙌
saveImages Saved image apple-splash-2388-1668 🙌
...

[
  {
    "src": "manifest-icon-192.maskable.png",
    "sizes": "192x192",
    "type": "image/png",
    "purpose": "any"
  },
  {
    "src": "manifest-icon-192.maskable.png",
    "sizes": "192x192",
    "type": "image/png",
    "purpose": "maskable"
  },
  {
    "src": "manifest-icon-512.maskable.png",
    "sizes": "512x512",
    "type": "image/png",
    "purpose": "any"
  },
  {
    "src": "manifest-icon-512.maskable.png",
    "sizes": "512x512",
    "type": "image/png",
    "purpose": "maskable"
  }
]

当 iOS 设备需要设置过渡页时 <meta name="apple-mobile-web-app-capable" content="yes"> content 必须为 yes

完整的参考配置

manifest.json 参考

MDN:Manifest

css 复制代码
{
  "name": "Norman·Pong Website",
  "short_name": "NormanSite",
  "theme_color": "#FFFFFF",
  "background_color": "#424242",
  "display": "standalone",
  "orientation": "portrait",
  "scope": "./",
  "start_url": "./index.html",
  "description": "骚气十足且不专注于软件开发的技术博客",
  "icons": [
    {
      "src": "img/icons/icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "img/icons/icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ]
}

标签属性参考

xml 复制代码
<link rel="manifest" href="/manifest.json">
<link rel="icon" href="/img/norman-logo.png">

<!-- apple -->
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<meta name="apple-mobile-web-app-capable" content="yes">
<!-- 将状态栏设置为透明,若应用中有固定的导航栏,不建议使用 -->
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">

<!-- apple 设备参考,更详细的尺寸可使用 pwa-asset-generator 生成与查看 -->
<link rel="apple-touch-startup-image" media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/img/apple-splash/apple-splash-1170-2532.jpg">
<link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/img/apple-splash/apple-splash-828-1792.jpg">
<link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/img/apple-splash/apple-splash-1125-2436.jpg">
<link rel="apple-touch-startup-image" media="(device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/img/apple-splash/apple-splash-1179-2556.jpg">
<link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/img/apple-splash/apple-splash-1242-2208.jpg">
<link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/img/apple-splash/apple-splash-1242-2688.jpg">
<link rel="apple-touch-startup-image" media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/img/apple-splash/apple-splash-1284-2778.jpg">
<link rel="apple-touch-startup-image" media="(device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)" href="/img/apple-splash/apple-splash-1290-2796.jpg">
相关推荐
Qrun44 分钟前
Windows11安装nvm管理node多版本
前端·vscode·react.js·ajax·npm·html5
中国lanwp1 小时前
全局 npm config 与多环境配置
前端·npm·node.js
JELEE.2 小时前
Django登录注册完整代码(图片、邮箱验证、加密)
前端·javascript·后端·python·django·bootstrap·jquery
TeleostNaCl4 小时前
解决 Chrome 无法访问网页但无痕模式下可以访问该网页 的问题
前端·网络·chrome·windows·经验分享
前端大卫5 小时前
为什么 React 中的 key 不能用索引?
前端
你的人类朋友5 小时前
【Node】手动归还主线程控制权:解决 Node.js 阻塞的一个思路
前端·后端·node.js
小李小李不讲道理7 小时前
「Ant Design 组件库探索」五:Tabs组件
前端·react.js·ant design
毕设十刻7 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
mapbar_front8 小时前
在职场生存中如何做个不好惹的人
前端
牧杉-惊蛰8 小时前
纯flex布局来写瀑布流
前端·javascript·css