ror*_*ory 8 javascript progressive-web-apps
当用户安装pwa时,以下功能可以正常工作。但是,如果拒绝,则下次访问该站点时,即使不是未定义,也会deferredPrompt.prompt();引发Uncaught (in promise) DOMException异常deferredPrompt.prompt();。
关于先前给出答案的用户,我需要检查一些东西吗?
window.addEventListener('beforeinstallprompt', (e) => {
// Prevent Chrome 67 and earlier from automatically showing the prompt
//e.preventDefault();
let deferredPrompt;
// Stash the event so it can be triggered later.
deferredPrompt = e;
// Show the prompt
deferredPrompt.prompt();
// Wait for the user to respond to the prompt
deferredPrompt.userChoice
.then((choiceResult) => {
if (choiceResult.outcome === 'accepted') {
console.log('User accepted the A2HS prompt');
} else {
console.log('User dismissed the A2HS prompt');
}
deferredPrompt = null;
});
});
Run Code Online (Sandbox Code Playgroud)
我有类似的代码并遇到同样的问题。经过一些研究,我明白这deferredPrompt.prompt()将返回一个userResponsePromise承诺。然后我尝试添加这行代码来观察日志,看看会发生什么。
deferredPrompt.prompt()
.then(res => console.log(res))
.catch(error => { console.log(`----> ${error}`) })
Run Code Online (Sandbox Code Playgroud)
在控制台日志中,它显示
----> NotAllowedError: The prompt() method must be called with a user gesture
Run Code Online (Sandbox Code Playgroud)
我猜A2HS安装过程可能不允许prompt()直接调用。因此,我尝试通过设置一个调用操作按钮来更改我的代码,该按钮将调用prompt()方法,我认为它应该暗示“用户手势”的含义,如日志所示。
这是我的新代码,它看起来像 Google 开发人员的“添加到主屏幕”教程中的代码。(我不知道为什么我第一次没有关注它:P)
window.addEventListener('beforeinstallprompt', e => {
e.preventDefault()
deferredPrompt = e
})
const btnInstallApp = document.getElementById('btn-install-app')
if(btnInstallApp) {
btnInstallApp.addEventListener('click', e => {
deferredPrompt.prompt()
deferredPrompt.userChoice
.then(choiceResult => {
if(choiceResult.outcome === 'accepted') {
console.log('user accepted A2HS prompt')
} else {
console.log('user dismissed A2HS prompt')
}
deferredPrompt = null
})
})
}
Run Code Online (Sandbox Code Playgroud)
我在页面某处添加“安装应用程序”按钮
<button id="btn-install-app" class="btn">Install App</button>
Run Code Online (Sandbox Code Playgroud)
这次我单击“安装应用程序”按钮后可以看到“添加到主屏幕”提示。我希望这有帮助。
| 归档时间: |
|
| 查看次数: |
727 次 |
| 最近记录: |