动态设置清单时的PWA安装提示

时间:2019-11-11 18:01:26

标签: javascript android progressive-web-apps manifest.json

我们有一个符合PWA标准的Web应用程序。到目前为止,在Android设备上打开应用程序时,我们收到了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提示。但是,清单文件显然会被解释为,例如尝试将应用添加到主屏幕时,iconstart_url的设置正确。

这里是否有经验可以为PWA设置manifest.json?我可能会缺少什么?

1 个答案:

答案 0 :(得分:2)

我遇到了类似的问题。我得出的结论是,此问题可能是由于浏览器在将动态创建的清单插入DOM中之前检查了有效清单。

如果浏览器认为没有有效的清单可用于PWA安装,则安装提示将不会显示,该提示在文档中已足够清楚地说明。但是,调试此问题相当混乱,因为诸如Google Chrome Audit DevTool选项卡中的Lighthouse之类的工具会说该应用程序是可安装的,并且一切正常且繁琐……

可能是浏览器在页面加载期间仅检查一次有效清单的情况-不幸的是,我在任何地方都找不到任何公司详细信息。

我能够通过确保html文档的初始呈现器具有有效的PWA安装清单(其中包含一些默认值)来解决此问题(在我的情况下,这些值基于window.location.pathname)。然后,当我拥有所有适当的数据时,我可以创建所需的清单,并将其替换为DOM。然后,当准备安装PWA时,浏览器将使用所需清单中的数据。