5.1 Web 应用清单
Web 清单文件是简单的 JSON 文件,描述了应用相关的有用信息(名称、作者、图标和描述等),可使用户将 Web 应用安装到设备的主屏幕上,允许开发者自定义启动页面、模板颜色、URL。
{
"name": "Progressive Times Web App",
"short_name": "Progressive Times",
"start_url": "/index.html",
"display": "standalone",
"theme_color": "#FFDF00",
"background_color": "FFDF00",
"icons": [
{
"src": "homescreen.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "homescreen-144.png",
"sizes": "144x144",
"type": "image/png"
}
]
}
name:用作当提示用户安装应用时出现的文本。short_name:用作当应用安装后出现在用户主屏幕上的文本。start_url:决定了当用户从设备的主屏幕开启 Web 应用时所出现的第一个页面。- 根据构建的 Web 应用类型,可能需要预设如何首次加载。
display字段表示开发者希望他们的 Web 应用如何向用户展示。 - 通过使用
theme_color字段,可以对浏览器的地址栏进行着色,以符合网站的主色调。 icons字段决定了当把 Web 应用添加到设备主屏幕上时所显示的颜色。 在页面中引入清单文件:
<link rel="manifest" href="/manifest.json">
5.2 添加到主屏幕
要显示添加到主屏幕,需要满足几个条件:
- 需要 manifest.json 文件
- 清单文件需要启动 URL
- 需要 144 x 144 像素的 PNG 图标
- 网站必须使用通过 HTTPS 运行的 Service Worker
- 用户至少需要访问过网站两次,并且两次访问间隔在 5min 之上(浏览器内置的条件,确保该功能不会引起用户反感)
5.2.1 定制图标
"icon": [
{
"src": "homescreen.png",
"sizes": "144x144",
"type": "image/png"
}
]
5.2.2 添加启动画面
用户单击主屏幕上 Web 应用的图标后,在浏览器渲染页面的第一帧,将显示一个临时的“启动页面”。启动页面的内容是根据清单文件生成的。主要用到 name、background_color、icon 几个属性。
5.2.3 设置启动样式和 URL
显示模式决定了你想如何在用户的设备上呈现你的 Web 应用,启动 URL 是用户单击主屏幕图标时将到达的第一个页面。
start_url 用来指定当用户从设备启动应用时加载的 URL。如果给定的是相对路径,那么基础路径就是清单的路径。
显示模式表示 Web 应用在操作系统环境中的展现方式:
fullscreen:打开 Web 应用并占用整个可用的显示区域standalone:打开 Web 应用以看起来像一个独立的原生应用。用户代理将排除诸如 URL 栏等标准浏览器 UI 元素,但可以包括诸如状态栏和系统返回按钮的其他系统 UI 元素。minimal-ui:类似 fullscreen,但为用户提供了可访问的最小 UI 元素集合,例如后退按钮、前进按钮、重载按钮以及查看网页地址的一些方式。browser:使用操作系统内置的标准浏览器打开 Web 应用。display是可选项,默认以 browser 模式来显示。
5.3 添加到主屏幕的高级用法
5.3.1 取消提示
如果不希望显示添加到主屏幕操作栏,可以取消该操作。
window.addEventListener('beforeinstallprompt', function (e) {
e.preventDefault()
return false
})
5.3.2 判断使用情况
通过监听 beforeinstallprompt 事件,可以判断出用户是否决定添加 Web 应用到主屏幕或者直接关掉提示。
window.addEventListener('beforeinstallprompt', function (event) {
event.userChoice.then(function (result) { // 判断用户的选择并返回 promise
console.log(result.outcome)
if (result.outcome == 'dismissed') { // 根据用户的选择来决定如何执行
// 发送数据进行分析
} else {
// 发送数据进行分析
}
})
})
5.3.3 推迟提示
结合以上代码使得用户可以控制是否要添加网站,而不是浏览器决定何时显示操作栏。
var btnSave = document.getElementById('btnSave')
var savedPrompt
window.addEventListener('beforeinstallprompt', function (e) {
e.preventDefault()
btnSave.removeAttribute('disabled')
savedPrompt = e
return false
})
btnSave.addEventListener('click', function () {
if (savedPrompt !== undefined) {
savedPrompt.prompt()
savedPrompt.userChoice.then(function (result) {
if (result.outcome === 'dismissed') {
console.log('User dismissed homescreen install')
} else {
console.log('User added to homescreen')
}
savedPrompt = null
})
}
})
5.4 调试清单文件
Chrome 开发者工具的 Application 标签中,有 Manifest 菜单可快速有效查看和调整。



![[译] 终于,JavaScript 有了安全的数组方法](https://img-1252058122.cos.ap-guangzhou.myqcloud.com/blog/article-cover/cmfkkq9a00001uhcg5k63cmt3.jpg)

