我们有一个满足 PWA 标准的网络应用程序。至此,在安卓设备上打开应用时,我们收到了 PWA 安装提示。
现在,如果可能,我们想生成 manifest.json
在客户端动态。我正在按照以下文章中概述的步骤进行操作,看起来很有希望:
How to Setup Your Web App Manifest Dynamically Using Javascript
我们生成 JSON 并通过客户端 JS 将其设置为 blob URL:
const stringManifest = JSON.stringify(manifest);
const blob = new Blob([stringManifest], { type: 'application/json' });
const manifestUrl = URL.createObjectURL(blob);
document.querySelector('#manifest-placeholder').setAttribute('href', manifestUrl);
但是现在,当我在 Android 设备上打开应用程序时,我不再看到 PWA 提示。然而, list 文件显然会被解释,例如
icon
和 start_url
当我尝试将应用程序添加到主屏幕时已正确设置。这里有任何经验是否设置
manifest.json
PWA 有可能吗?有什么我可能会丢失的吗?
最佳答案
我遇到了类似的问题。我得出的结论是,此问题可能是由于在将动态创建的 list 插入 DOM 之前浏览器检查了有效 list 。
如果浏览器认为没有可用的有效 list 可用于 PWA 安装,则不会显示安装提示,这在文档中已经说明得很清楚。然而,调试这个问题相当令人困惑,因为 Google Chrome 审计开发工具选项卡中的 Lighthouse 等工具会说该应用程序是可安装的,并且一切都很好而且花花公子......
可能是浏览器在页面加载期间只检查一次有效 list - 不幸的是,我在任何地方都找不到任何关于此的确切细节。
我能够通过确保 html 文档的初始渲染具有用于 PWA 安装的有效 list 来解决此问题,其中包含一些默认值(在我的情况下,这些值基于 window.location.pathname
)。稍后,当我拥有所有可用的适当数据时,我可以创建所需的 list 并在 DOM 中替换它。然后,当准备好安装 PWA 时,浏览器会使用来自所需 list 的数据。
关于javascript - 动态设置 list 时的 PWA 安装提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58806430/