Beforeinstallprompt 在每次加载时触发。我在这里使用了代码:https ://developers.google.com/web/fundamentals/app-install-banners/
我没有使用我通过调用禁用的迷你信息栏e.preventDefault();
问题是,showAddToHomeScreen();
如果用户不点击,每次加载都会调用addToHomeScreen
。
我希望该showAddToHomeScreen();
函数仅每月左右调用一次,方法是存储有关会话中最后一次“取消”点击或类似内容的信息。谷歌不应该自己做这个吗?
这是我在以下链接中找到的: https ://developers.google.com/web/updates/2018/06/a2hs-updates
您只能在延迟事件上调用 prompt() 一次,如果用户单击对话框上的取消,则需要等到在下一页导航中触发 beforeinstallprompt 事件。与传统的权限请求不同,单击取消不会阻止将来对 prompt() 的调用,因为它必须在用户手势内调用。
window.addEventListener('beforeinstallprompt', function (e) {
// Prevent Chrome 67 and earlier from automatically showing the prompt
e.preventDefault();
// Stash the event so it can be triggered later.
deferredPrompt = e;
showAddToHomeScreen();
});
function showAddToHomeScreen() {
var prompt = document.querySelector(".a2hs-prompt");
prompt.style.display = "flex";
var open = document.querySelector(".a2hsBtn");
open.addEventListener("click", addToHomeScreen);
var close = document.querySelector(".a2hsBtn-close");
close.addEventListener("click", function() {
prompt.style.display = "none";
});
}
function addToHomeScreen() {
var prompt = document.querySelector(".a2hs-prompt");
// hide our user interface that shows our A2HS button
prompt.style.display = 'none';
if (deferredPrompt) {
// Show the prompt
deferredPrompt.prompt();
// Wait for the user to respond to the prompt
deferredPrompt.userChoice.then(
function (choiceResult) {
if (choiceResult.outcome === 'accepted') {
show_ad2hs_success_message();
}
deferredPrompt = null;
});
}
}