让将 Discourse 安装为 PWA 更加容易

无论我怎么做,这个我转换成 PNG 的文件仍然显示为 JPEG。起初我以为预览(Preview)转换出了问题,但后来我使用了应该更可靠的 Affinity Photo。

我不记得更改过该设置,因为它旁边没有“重置”选项。

当我上传另一张确实是 PNG 格式的图片时,我发现类型仍然被固定住了。Discourse 似乎特别想转换这个文件。有什么建议吗?

3 个赞

您遇到了一个已知(尽管比较冷门)的 Bug,上述提交已修复该问题。不过,该提交尚未包含在 Discourse 的稳定版本中。

_临时_将 recompress original jpg quality(重新压缩原始 JPG 质量)设置为 100,应可阻止转换发生。

(……或者,您可以尝试降低导出 PNG 的质量,使其低于 recompress original jpg quality 设置的值。)

请务必在上传徽标后将该设置恢复为之前的值!

3 个赞

我觉得我应该获得一枚徽章,因为我在一个星期内发现了两个 Discourse 的漏洞。:slight_smile:

不过,尽管我采取了上述两个步骤,文件仍然被转换成了 JPEG。我将设置调整为 100%,并将图像以 92% 的质量保存为 JPG,然后导出为 PNG(我无法直接更改 PNG 的质量?)。还有其他变通方法吗?或者我是不是哪里做错了?

1 个赞

切换到 stable 分支后,我可以复现这个(已知的)问题:

但我无法用建议的变通方法复现该问题:

说实话,我有点困惑!

Mozilla Firefox 中也没有出现该选项。

为什么在 iOS 设备上(尤其是现在它们已支持 PWA)没有出现安装横幅?

是的,在我的 Pixelbook Go 上运行效果极佳。PWA 在 Chrome OS 上是必不可少的功能。

因为 iOS 浏览器不支持此功能,且暂无添加该功能的计划。

2 个赞

我之前建议过,为什么不在网站的某个位置添加一个按钮或链接,用于安装 PWA,正如这篇文章中所解释的那样。

我们几年前就已经有了:

抱歉,我指的是为未安装 PWA 的用户提供一个不那么显眼但持久的按钮或链接,例如放在菜单中。

我认为这很有用,因为当有用户想要安装应用时,我们往往不清楚他们所处的具体状态,进行问答沟通又非常耗费精力。如果我们能提供一个非常可靠的“两步走”流程给用户,那就太好了:例如,进入汉堡菜单 → 安装应用。这样一来,我们就不必再担心他们的语言环境、访问次数、是否曾关闭过横幅或卸载过应用,以及他们使用的是哪种浏览器、该浏览器如何呈现安装选项等问题。

3 个赞

这 literally 就是现有的工作流程 :joy:

这里(包括我自己在内)的很多困惑可能源于:不同浏览器有不同的 PWA 安装选项:

  1. Android Chrome(即默认浏览器):我猜您发布的截图就是来自这里。看起来在这里,汉堡菜单中有一个“安装应用”选项。如果所有浏览器都能提供该选项就太好了,但听起来目前似乎无法实现。

  2. iPhone Safari(默认浏览器):汉堡菜单中没有安装按钮。要安装,需要点击分享图标(带向上箭头的方框),然后向下滚动找到“添加到主屏幕”。根据这里的讨论,我推测无法在汉堡菜单中添加该按钮。不过,这确实会将应用保存到主屏幕,但我不确定仅凭这一点是否足以赋予其 PWA 功能,例如保存之前的状态。

  3. 桌面版 Chrome:在我的 Mac Chrome 浏览器中,汉堡菜单里没有安装按钮。它应该在那里吗?能否将其添加进去?

  4. 桌面版 Safari:在我的 Mac Safari 浏览器中,汉堡菜单里也没有安装按钮。它应该在那里吗?能否将其添加进去?

1 个赞

是的,@JQ331 说得对。

Falco 提出的方案是 Chrome 菜单。我所说的“汉堡菜单”指的是 Discourse 的菜单,而不是浏览器自带的菜单。由于上面有人指出该功能在 Safari 或 Firefox 中无法使用,因此该选项依赖于浏览器。假设它能够在这些浏览器中安装,但用户并未获得该选项,那么提供一个 Discourse 菜单选项似乎是最佳方案。此外,这还能提醒用户该选项的存在,否则他们可能永远不会去查看 Chrome 菜单。

1 个赞

您无法在任何由苹果控制的内容上添加安装按钮,苹果已多次表示,他们不希望开发者创建此类按钮。

对我来说它是存在的:

在桌面版的地址栏中也能找到它。

您在自己的网站上看不到该按钮,是因为使用了 JPG 格式的图标问题。PWA 是一个快速变化的领域,相关标准也在不断调整。如果您希望获得最佳的 PWA 兼容性,建议使用我们的默认发布渠道。

3 个赞

我指的是 Discourse 的汉堡菜单(而不是 Chrome 菜单)。实际上,我现在看到安卓截图也是来自 Chrome 菜单,而非 Discourse 的汉堡菜单。

如果能在 Discourse 的汉堡菜单中添加该按钮就好了——用户会更频繁地看到它,而且在指导用户将其安装为 PWA 时也会更清晰。这可能不值得投入大量的开发精力,但会是一个贴心的改进。

Chromium 浏览器似乎是唯一显示安装提示的浏览器。Mozilla Firefox 和 Safari 基于不同的渲染引擎。

1 个赞

我仅仅通过创建一个主题组件添加了该按钮。

只需创建一个新的主题组件。

在 header 中添加以下 JS 代码:

<script>
    let deferredPrompt; // 允许显示安装提示
    const installButton = document.getElementById("install_button");

    window.addEventListener("beforeinstallprompt", e => {
      console.log("beforeinstallprompt 事件已触发");
      // 阻止 Chrome 76 及更早版本自动显示提示
      e.preventDefault();
      // 暂存事件以便稍后触发
      deferredPrompt = e;
      // 显示安装按钮
      installButton.hidden = false;
      installButton.addEventListener("click", installApp);
    });

    function installApp() {
      // 显示提示
      deferredPrompt.prompt();
      installButton.disabled = true;

      // 等待用户响应提示
      deferredPrompt.userChoice.then(choiceResult => {
        if (choiceResult.outcome === "accepted") {
          console.log("PWA 设置已接受");
          installButton.hidden = true;
        } else {
          console.log("PWA 设置已拒绝");
        }
        installButton.disabled = false;
        deferredPrompt = null;
      });
    }

    window.addEventListener("appinstalled", evt => {
      console.log("appinstalled 事件已触发", evt);
    });
</script>

并在需要安装按钮的位置放置以下 HTML:

<button id="install_button" hidden>安装</button>

该按钮默认隐藏,仅在 PWA 未安装时显示。

我已在 Chrome 上对此进行了测试。

6 个赞

太棒了!您是否考虑将其作为一个正式的主题组件?或者更好的是,修改“汉堡链接”主题组件以包含它?因为那里正是我想要它的位置!

2 个赞

能否请您上传修改后的代码,以便在汉堡菜单中显示“安装应用”按钮?

1 个赞

我似乎无法让它正常工作。承认对这一切都很陌生。

我加载了组件,将 JavaScript 添加到了标头,并将组件设置为默认主题。

但是 HTML 脚本呢——是否可以在帖子中使用 HTML?似乎不行。如果不行,我还能在哪里有效地放置它?

谢谢!真的希望这能帮助我。

我猜这只适用于安卓系统?