PWA:preventDefault不能与preventDefault一起使用

时间:2018-11-03 18:53:49

标签: javascript progressive-web-apps

我正在Android设备上的Chrome 70上进行测试,这完全可以防止AddToHomescreen提示出现。我不能阻止提示或捕获以供以后使用。该提示会在每次加载页面时继续显示。

文本框已填充,并显示正在加载beforeinstallprompt事件。事件处理程序上的preventDefault不会阻止提示。

为什么??????

    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <meta name="theme-color" content="#eaa103">
    <link rel="manifest" href="/pwa/manifest.json" />
    <title>Some App</title>
    <link rel="stylesheet" href="/pwa/css/bootstrap.min.css" />
    </head>
    <body>

    <div class="container">
        <testbox></testbox>
    </div>

    <script src="/pwa/js/jquery.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js">

    </script>

    <script>
    var deferredPrompt;
    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;
        $("testbox").html("beforeinstallprompt loaded");
        return false;
    }); 
    </script>

    </body>
    </html>

3 个答案:

答案 0 :(得分:0)

根据Google Developers的这篇文章:https://developers.google.com/web/updates/2018/06/a2hs-updates

  

启动Chrome 68 [...]会显示迷你信息栏,无论是否在preventDefault()事件中调用beforeinstallprompt

因此,开发人员目前无法在> 67的移动版Chrome(在台式机和<68的旧版移动版上使用)上阻止该页面上的横幅。

此处有更多信息:https://developers.google.com/web/fundamentals/app-install-banners/。如前所述:

  

迷你信息栏是Android上的Chrome浏览器的临时体验

     

如果被用户拒绝,则必须经过足够长的时间(约3个月)才能显示。

我希望这会有所帮助。

答案 1 :(得分:0)

您需要使用chrome 76及更高版本来阻止默认的迷你信息栏。

来源:https://developers.google.com/web/fundamentals/app-install-banners/#preventing_the_mini-infobar_from_appearing

答案 2 :(得分:0)

很可能 Window 未定义,因为您的页面正在服务器端呈现。

解决方案:在触发事件之前进行检查,或者通过在运行时运行脚本来确保您的代码在客户端运行。

如果您使用的是 React 或 Nextjs,请使用 useEffect 钩子或 componentDidMount。