现在PWA的添加到主屏幕的机制比较的被动,希望能在每次打开PWA页面的时候提示添加到主屏幕(前提是没有安装到主屏幕),然后看到这篇文章:
https://blog.nfz.moe/archives...
意思是添加下面的代码就可以:
window.addEventListener('beforeinstallprompt', event => {
event.userChoice.then(result => {console.log(result.outcome)
})
})
实际测试结果发现,并没有弹出添加到桌面的提示。
刚在项目里实现完,发现有两个坑。
重点:
代码在这里(TypeScript版本,如果你是JS,去掉代码里的类型就行):
这里有一个坑就是:在通过
prompt()
触发PWA安装弹框后,用户点击取消(不安装)后,会再次触发beforeinstallprompt
。一定要记住这点。所以一开始我没有
'init'
的逻辑,就会导致每次用户点击页面,都会触发安装弹框,每次都会。就是因为走完click事件之后,虽然执行了
deferredPrompt = null;
,但用户取消安装,就又走到了deferredPrompt = e;
,然后用户点击页面,又会触发prompt()
。第二个坑: 浏览器触发
beforeinstallprompt
的时机很早,所以这段代码不能放在很后面,比如放在页面某个接口返回后就不行,因为浏览器已经触发过了,再写listener 晚了。尽量放在
index.html
里,或者index.html
下的某个js
的顶层。什么是顶层?