目录
PWA 之拦截 A2HS 实现自主应用添加主屏事件
1. 概念
A2HS 是(Add to Home screen)的缩写,也是PWA特性之一,它主要为web应用程序提供与本机应用程序相同的用户体验优势,将PWA应用添加至桌面后,用户可以像打开普通应用程序一样使用。
2. 背景
默认情况下,当编写的web应用满足pwa应用最低要求(manifest.json和service-sworker)时,浏览器会在提示用户可以将当前访问的web安装到桌面上,这个行为是浏览器控制的,用户是否可以不依赖于浏览器,不必每次都弹出 A2HS 的banner,行为由用户控制,如点击按钮提示安装,本文基于此目的编写。
3. beforeinstallprompt
要实现上述要求,需要监听 beforeinstallprompt 事件并进行处理。
实现代码如下:
// 定义A2HS事件对象
let installPromptEvent;
// 监听beforeinstallprompt事件,浏览器触发A2HS时会执行
window.addEventListener('beforeinstallprompt', (e) => {
// 阻止自动提示
e.preventDefault();
// 储存事件对象,方便在之后的按钮事件中手动触发
installPromptEvent = e;
});
// UI上的按钮点击事件
installBtn.addEventListener('click', (e) => {
// 弹出A2HS提示
installPromptEvent.prompt();
// 等待用户操作结果
installPromptEvent.userChoice
.then((choiceResult) => {
if (choiceResult.outcome === 'accepted') {
console.log('用户已经接受安装');
} else {
console.log('用户已经取消安装');
}
// 只能用一次
installPromptEvent = null;
});
});
4. demo效果
5. 判断是否安装
监听安装事件
window.addEventListener('appinstalled', (event) => {
console.log('installed');
});
若是从主屏幕启动,则可以通过 javascript 判断
if (window.matchMedia('(display-mode: standalone)').matches) {
console.log('display-mode is standalone');
}
safari浏览器
if (window.navigator.standalone === true) {
console.log('display-mode is standalone');
}
这里需要注意的是,上面三个输出只会在 standalone 模式下执行
6. 参考链接
版权所有,本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。转载请注明出处:https://www.wangjun.dev//2019/05/pwa-handle-install-prompt/