sea*_*abr 18 progressive-web-apps
您好我正在尝试安装自定义PWA"添加到主屏幕".
ServiceWorkerRegistration成功.
但是函数beforeinstallpromp在注册后没有调用.
<script type="text/javascript">
function request_debug(paramdata){
document.getElementById('output').innerHTML += '<BR>'+ paramdata;
}
window.addEventListener('load', function() {
document.getElementById('output').style.display = "block";
if('serviceWorker' in navigator) {
navigator.serviceWorker.register('sw.js').then(function(registration) {
console.log('Service worker registrado com sucesso:', registration);
request_debug(registration);
}).catch(function(error) {
console.log('Falha ao Registrar o Service Worker:', error);
request_debug(error);
});
var isTooSoon = true;
window.addEventListener('beforeinstallprompt', function(e) {
//e.preventDefault();
//e.prompt();
//promptEvent = e;
request_debug(' window.addEventListener beforeinstallprompt fired!')
if (isTooSoon) {
//e.preventDefault(); // Prevents prompt display
// Prompt later instead:
setTimeout(function() {
isTooSoon = false;
e.prompt(); // Throws if called more than once or default not prevented
}, 4000);
}
});
}else{
console.log('serviceWorker not in navigator');
request_debug('serviceWorker not in navigator');
}
});
</script>
Run Code Online (Sandbox Code Playgroud)
我的服务工作者也在根目录... HTTPS是安全的!
我的清单:
{
"background_color": "purple",
"description": "lojaportaldotricot TESTE",
"display": "standalone",
"icons": [
{
"src": "/componentes/serviceWorker/fox-icon.png",
"sizes": "192x192",
"type": "image/png"
}
],
"name": "lojaportaldotricot",
"short_name": "lojaportaldotricot",
"start_url": "/dashboard"
}
Run Code Online (Sandbox Code Playgroud)
只有当我设置"启用"chrome:// flags /#bypass-app-banner-engagement-checks时,它才有用
小智 16
试试这个 :
<script>
let deferredPrompt;
window.addEventListener('beforeinstallprompt', function(event) {
// Prevent Chrome 67 and earlier from automatically showing the prompt
e.preventDefault();
// Stash the event so it can be triggered later.
deferredPrompt = e;
});
// Installation must be done by a user gesture! Here, the button click
btnAdd.addEventListener('click', (e) => {
// hide our user interface that shows our A2HS button
btnAdd.style.display = 'none';
// 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;
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
只有在某些条件为真时才会触发beforeinstallprompt:
and*_*iya 14
除上述所有步骤外,还要检查该应用程序是否已在此处卸载:
chrome://apps
只是从 Mac 上的 Chrome Apps 文件夹中删除该应用程序似乎不会将其从 Chrome 中删除
如果之前安装了该应用程序,beforeinstallprompt
则不会触发该应用程序,也不会抛出任何错误:(
小智 6
对于任何需要阅读本文的人:我在尝试找出提示时在使用 Vue3 应用程序时遇到的一个小旁注:
beforeInstallPrompt将在页面加载后不久触发。
因此,请确保在页面加载附近设置事件侦听器。我花了几个小时才发现这一点。我试图在用户注册的某个地方添加事件监听器。页面加载后的方式。并且无法弄清楚为什么提示没有显示。
是的,清单中的“start_url”不正确。
如果清单的任何部分被破坏,则不会触发“beforeinstallprompt”。
该事件未触发,因为...清单 start_url 不正确。
我最喜欢的解决方法是查看 DevTools 的 > NETWORK 选项卡中的 404。
查看清单损坏原因的另一种方法是在 DevTools 中运行 > AUDIT 并查看错误是什么。就像@sealabr 发现的那样:
“失败:服务工作线程未成功提供清单的 start_url,等待获取的 start_url 超时。” 这意味着“start_url”
该线程对生产故障排除有很大帮助。谢谢。
归档时间: |
|
查看次数: |
14913 次 |
最近记录: |