【问题标题】:PWA Add to HomescreenPWA 添加到主屏幕
【发布时间】:2021-05-13 21:46:47
【问题描述】:

我已经使用 serviceworker.js 和清单创建了一个添加到主屏幕,但这是通过页面加载开始的,我想用一个按钮来完成。

<button onclick="downloadapp();">Download Web-App</button>
        
<script>
    function downloadapp(){
            
     if ('serviceWorker' in navigator) {
        console.log("Will the service worker register?");
        navigator.serviceWorker.register('service-worker.js')
          .then(function(reg){
            console.log("Yes, it did.");
         }).catch(function(err) {
            console.log("No it didn't. This happened:", err)
        });
     }
     
        }
</scirpt>

这不起作用。

【问题讨论】:

标签: javascript progressive-web-apps


【解决方案1】:

首先要处理安装选项,您需要已经安装了 service worker。我想您想添加一个自定义按钮来安装您的 Web 应用程序,您可以添加一些事件侦听器,如下所示

您的代码需要更新

<script>
     if ('serviceWorker' in navigator) {
        console.log("Will the service worker register?");
        navigator.serviceWorker.register('service-worker.js')
          .then(function(reg){
            console.log("Yes, it did.");
         }).catch(function(err) {
            console.log("No it didn't. This happened:", err)
        });
     }
</scirpt>

处理服务工作者状态和安装事件的代码

<script>
    window.addEventListener("beforeinstallprompt", (e) => {
        // Prevent the mini-infobar from appearing on mobile
        e.preventDefault();

        // Stash the event so it can be triggered later.
        window.deferredPrompt = e;
        console.log("Registerd event");
        // Update UI notify the user they can install the PWA
        window.localStorage.setItem("pwainstalled", "false");
        //this.showInstallPromotion();
    });
    window.addEventListener("appinstalled", (evt) => {
        // Log install to analytics
        console.log("INSTALL: Success");
        window.localStorage.setItem("pwainstalled", "true");
    });
</scirpt>

安装按钮的管理和显示功能

<script>
    function installButtonDisplay() {
        var btn = document.createElement("BUTTON");
        btn.setAttribute("id", "install-button");
        btn.innerHTML = "Download Web-App";
        btn.onclick = function() {
          installPWA();
        }
        document.body.appendChild(btn);
    }
    function installPWA() {
        if (window.deferredPrompt) {
            console.log("inside window.deferredPromp if condition");
            window.deferredPrompt.prompt();
            window.deferredPrompt.userChoice.then((choiceResult) => {
               if (choiceResult.outcome === "accepted") { 
                  removeButton();                   
                  console.log("User accepted the install prompt");
               } else {
                  isInstalledState(false);
                  console.log("User dismissed the install prompt");
               }
           });
        }
    }
    function removeButton() {
        var elem = document.getElementById('install-button');
        elem.parentNode.removeChild(elem);
    }
</scirpt>

注意:您可能需要根据您的用例添加或删除代码,这仅供参考和更好地理解。

【讨论】:

  • 感谢它的工作,但不幸的是它不适用于 iphone,你有解决方案吗?
  • 您好@Mertkan,对于 iPhone,您可以参考 StackOverflow 的回答,如果对您有帮助,请接受、点赞和分享回答stackoverflow.com/questions/51160348/…
猜你喜欢
  • 2018-09-11
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 2022-07-26
  • 2018-10-27
  • 2020-09-28
  • 1970-01-01
相关资源
最近更新 更多