(没时间解释了,先学了再说)
PWA 本身不是一套技术栈,而是一个理念,是使用一系列的技术,改进 Web 应用在安全、性能、体验等方面的表现,并渐进式的达到原生应用的表现能力。
Google 官网针对于 PWA 给出的关键词是:
- Reliable - Load instantly and never show the downasaur, even in uncertain network conditions.
- Fast - Respond quickly to user interactions with silky smooth animations and no janky scrolling.
- Engaging - Feel like a natural app on the device, with an immersive user experience.
可靠、快速以及良好的使用体验,也即是通过 Web Application 来提供媲美原生应用的服务。虽然在当前移动端用户已经习惯了将各个独立应用作为入口的环境下,PWA 的理念在未来的发展福祸未卜,不过作为开发者还是先学习了再说,有备无患。
关于 PWA 相关的内容,将划分为三个博客对部分技术要点进行资料整理(搬运 ),分别为:
说到这个就想起来之前刚到实验室的时候,姜工提的 web 添加桌面快捷方式的需求。由于 Web 应用本身权限比较低,不能自动添加,只能借助浏览器所带的功能,因此那个需求也就不了了之。
PWA 提供了 Web App Manifest 用以将 Web Application 安装到设备的主屏幕。
Manifest 只需要简单的添加 link 标签就能够完成部署:
<link rel="manifest" href="manifest.json" />
这里是一个 manifest.json 的例子,来自 MDN
{
"name": "HackerWeb",
"short_name": "HackerWeb",
"start_url": ".",
"display": "standalone",
"background_color": "#fff",
"description": "A simply readable Hacker News app.",
"icons": [{
"src": "images/touch/homescreen48.png",
"sizes": "48x48",
"type": "image/png"
}, {
"src": "images/touch/homescreen72.png",
"sizes": "72x72",
"type": "image/png"
}, {
"src": "images/touch/homescreen96.png",
"sizes": "96x96",
"type": "image/png"
}, {
"src": "images/touch/homescreen144.png",
"sizes": "144x144",
"type": "image/png"
}, {
"src": "images/touch/homescreen168.png",
"sizes": "168x168",
"type": "image/png"
}, {
"src": "images/touch/homescreen192.png",
"sizes": "192x192",
"type": "image/png"
}],
"related_applications": [{
"platform": "web"
}, {
"platform": "play",
"url": "https://play.google.com/store/apps/details?id=cheeaun.hackerweb"
}]
}
其中,display
属性用于指定 Application 的显示模式,如fullscreen
(全屏显示)以及standalone
(作为独立 Application 显示)等;icon
属性指定了不同 size 的图标资源;name
、short_name
、description
等属性都很清晰,不再做介绍,其在 MDN 中有更为详细的介绍。
兼容性就是一个令人悲伤的事情了。在 Desktop 端,当前没有浏览器对 Manifest 进行支持(不过桌面环境本就不是 PWA 的舞台);在 Mobile 端,各大浏览器厂商的支持情况也很惨淡:
Feature | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Basic support | 未实现 | 39.0 | ? | ? | 32.0 | ? | 39.0 |
background_color | 未实现 | 46.0 | ? | ? | (Yes) | ? | 46.0 |
theme_color | 未实现 | 46.0 | ? | ? | 未实现 | ? | 46.0 |
icons, name, short_name, and theme_color used for Add to home screen feature. | ? | (Yes) | 53.0 | ? | 未实现 | ? | (Yes) |