21 / 11 / 18
你在开发 PWA 吗?此篇介绍几个通过 JavaScript 和 CSS 就可以使你的 PWA 更接近 Native 应用的小技巧。
1.为 PWA standalone 模式设置空标题。
网页的 Title 在浏览器访问场景下有着重要的作用,尤其是当打开了多个标签页时,可以根据 Title 来快速区分不同的网页。另外一点,聪明的网页开发者经常在 Title 中设置适当的信息以利好 SEO。
而 PWA 以 standalone 模式使用时,由于其拥有自己独立的窗口、独立的启动器图标等,此时 Title 便可能不那么重要了。所以为了使其更干净,更接近 Native App,可以单独为此模式访问时设置简洁的标题,甚至不设置标题,减少页面文字元素干扰。
const mqStandAlone = '(display-mode: standalone)'
// Check this page is running in pwa mode
if (navigator.standalone || window.matchMedia(mqStandAlone)) {
document.title = ''
}
navigator.standalone
是检测网页是否以独立模式运行,其仅在 iOS Safari 浏览器上收到支持。 详情见:navigator.standalone MDN
2.使用 display-mode
来设置 PWA 专属样式。
例如这样设置一个圆角,使浏览器 Title 区域和网页导航部分更加融为一体。而浏览器模式时,则不需要此圆角,以避免圆角与浏览器边缘相遇时的消失凹陷。
<meta name="theme-color" content="#f5f5f5" /> <style> nav { background-color: #f5f5f5; } main { backgrround-color: #fff; } @media all and (display-mode: standalone) { main { border-top-left-radius: 12px; } } </style> <body> <nav></nav> <main></main> </body>
另外注意,我们这里使用
theme-color
来设置浏览器状态栏的背景色。
3.设置取消滚动溢出,避免滚动到顶部时产生的间隙。
按技巧 2 设置了之后,我们发现当滚动到网页顶部或底部边界时,浏览器默认的滚动溢出行为,会使我们网页中出现一条缝隙。我们可以使用下面这个设置来避免这一表现。
body { overscroll-behavior-y: none; }
4.设置鼠标指针为默认 default,禁止用户选择。
这一技巧,在页面充斥大量的菜单和按钮,而非跳转性链接时,尤为有效。同时避免鼠标指针频繁地在默认和 point 状态来回跳动。
*, a, button { cursor: default; user-select: none; }
有网友认为,此做法有些偏激,但只是使其更接近 Native 应用而已。现在网站越来越模糊了按钮和链接的界限。通常情况下,按钮会具有较强的 UI 特征标识,链接仅从静态视觉看上去相对按钮来说会偏弱。
所以我们进行这一设置之后,可以为需要跳转页面的链接,再单独设置 cursor: point
即可。
5.为不同系统设置单独的应用图标。
例如为 PWA 独立应用模式访问时,在 Mac 系统场景下,设置一个 BigSure 风格的图标,浏览器访问则使用通用风格图标。下面一段简单的介绍来实现这一点。
我们需要两个单独的 manifest.json 文件,一个是通用配置文件,另一个是专门用于 Mac 的文件。
首先,从 HTML 页面删除 manifest link 的 href 属性
<link rel="manifest" id="manifest" />
然后,使用 JavaScript 来检查是否是 Mac,然后根据结果来设置 href。
const setManifest = () => { const isMacOS = /Mac OS X/.test(navigator.userAgent) document.querySelector('#manifest').setAttribute('href', isMacOS ? '/manifest-mac.json' : '/manifest.json') }
对应的文件:
// manifest.json { "short_name": "YourProductName", "name": "YourProductName", "description": "Your information", "icons": [ { "src": "/icon/android-icon-192*192.png", "sizes": "192*192", "type": "image/png" }, { "src": "/icon/android-icon-512*512.png", "sizes": "512*512", "type": "image/png" } ] } // manifest-mac.json { "short_name": "YourProductName", "name": "YourProductName", "description": "Your information", "icons": [ { "src": "/icon/mac-icon.png", "sizes": "192*192", "type": "image/png" }, ] }
router.replace
来处理路由导航。避免在移动端左右边缘滑动时的页面跳转行为,只有当需要提供「返回」功能时,再显式设置。
好了,以上就是我本次要分享的全部内容了,希望可以帮助你在进行 PWA 开发时,更好的处理一些细节。