PWA - 未调用 beforeinstallprompt [英] PWA - beforeinstallprompt not called

查看:169
本文介绍了PWA - 未调用 beforeinstallprompt的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我正在尝试安装自定义 PWA添加到主屏幕".

Hello I'm trying to install a custom PWA "Add to Homescreen".

ServiceWorkerRegistration 成功.

The ServiceWorkerRegistration is successful.

但是 beforeinstallpromp 函数在注册后没有调用.

But the function beforeinstallpromp is not calling after register.

<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>

还有我在根目录中的服务工作者...HTTPS 是安全的!

Also my service worker in root directory... HTTPS is secure!

我的清单:

{
  "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"
}

它仅在我设置启用"chrome://flags/#bypass-app-banner-engagement-checks 时有效

It's only workes when I set "Enable" chrome://flags/#bypass-app-banner-engagement-checks

看起来我发现了问题.Chrome 的 DevTools(F12) 的 Audits 选项卡提供调试信息.

Look's like I've found the problem. The Audits tabs of Chrome's DevTools(F12) gives debugging information.

推荐答案

试试这个:

 <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>

beforeinstallprompt 只会在某些条件为真时触发:

beforeinstallprompt will only be fired when some conditions are true :

  • PWA 必须尚未安装
  • 满足用户参与启发式(以前,用户必须与域交互至少 30 秒,这不再是必需的).
  • 您的网络应用必须包含网络应用清单.
  • 您的网络应用必须通过安全的 HTTPS 连接提供服务.
  • 已使用 fetch 事件处理程序注册了 Service Worker.

这篇关于PWA - 未调用 beforeinstallprompt的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆