如何将SVG用作PWA图标?

7
制作渐进式Web应用程序(PWA)时,您需要创建大量不同大小的图标并在.manifest文件中声明它们。一个SVG图标看起来可以很好地解决这个问题,但不幸的是,目前我无法做到这一点。
我尝试了以下方法:
1.使用Illustrator创建2个不同的SVG,并将它们设置为方形画板(画布)。结果:在Chrome开发工具中,要么显示“图像文件大小不正确(1200x1200):必须提供至少144x144”,要么是“无法加载您的svg”。然而,在Chrome中打开同一网址上的相同SVG却可以完美显示!
2.在.manifest文件中设置“sizes”:“any”。虽然此关键字被认为被接受,但是开发工具会显示错误信息。
3.添加“purpose”:“maskable”或“purpose”:“maskable any”或“purpose”:“any”。
开发工具指出我的SVG(150x150)小于最小要求(144x144),同时还要求我必须提供至少一个png、svg或wepP格式的图标。

1
你不必为 PWA 的图标创建“大量不同尺寸”。在 manifest.webmanifest 文件中(也可以使用 JSON 扩展名找到),您可以放置像 144x144(Chrome 使用的主要图标)、192x192512x512 这样的尺寸(2 的幂是常用的图标尺寸)。请查看 Google 的文档MDN 的文档W3C 规范,了解有关 Web 应用程序清单的详细信息。 - BarryCap
1个回答

16

实际上有一些规则没有在开发者工具中提到。您应该严格按照以下格式编写清单:

There are some rules by fact that are not mentioned in devtools. You should format manifest exactly like this:

  "icons": [{
    "src": "/my/etc/pwa1/cheese_sq.svg", //inside the scope!
    "sizes": "48x48 72x72 96x96 128x128 256x256", //see the size in the devtools, not in editor. I've set up size 1200x1200 in Illustrator, but Chrome says it's 150x150. Also, "sizes":"any" not work.
    "type": "image/svg+xml", //not image/svg which is still visible in web
    "purpose": "any" //not "maskable any" as you may see there in answers.
  }]

现代标准中有太多的官僚主义,请杀了我吧!


然而,即使是正确注册的SVG图标,在某些情况下也可能无法显示。最好使用那些PNG图像库。 - fathergorry
哦,你的应用程序生成了如此多的大小。如果这被认为是良好的实践,那么PWA理念肯定出了严重问题... - fathergorry
这并不是PWA的理念哈哈。 只是因为消费者使用了如此多不同的设备。我的意思是,有超过10,000种不同的Android设备。 那是一组各种图标,我知道它们被不同的浏览器和不同类型的设备使用。 - Chris Love
4
如果有这么多设备,那么Android操作系统应该具有强大的SVG支持和良好的调整大小算法,而不是把这些问题丢给应用程序开发人员。 - fathergorry
2
我更喜欢使用SVG,但我得到了一个错误(或警告?)“图标的实际大小与指定大小不匹配”... - ryszard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接