尽管添加了 polyfill,WebP 图像不会在 safari 中显示

WebP images doesn't display in safari although added polyfill

Google 洞察力告诉我将我的 JPG 图片转换为 WebP。它将每张图片的宽度减少了一半,但问题是 Mac 上的 Safari(可能是最差的浏览器,甚至边缘更好请不要使用它,这样它就会死掉)不显示 webP。

我已将 this script 添加到我的应用程序中,我认为它是 polyfill,但它没有帮助。它也写在那里下载两个文件,但 webpjs-0.0.2.swf 已损坏 link。有一些有效的 polyfill 吗?

大多数图像通常作为绑定内联样式用作背景图像。因此,例如 this polyfill 将不起作用,因为 css 支持是未来的计划。

反过来 this 缺少有关 css/inline-style 的文档,还需要做一些工作来替换每个组件中每个图像中的路径。

如果您有 mac 和 safari - live demo

custom built modernizr刚刚从中获取了 WebP 检查器,然后使用了这个方法:

对于 HTML 图片:

<picture>
  <source srcset="img/awesomeWebPImage.webp" type="image/webp">
  <source srcset="img/creakyOldJPEG.jpg" type="image/jpeg"> 
  <img src="img/creakyOldJPEG.jpg" alt="Alt Text!">
</picture>

对于 CSS 图片:

.no-webp .elementWithBackgroundImage {
  background-image: url("image.jpg");
}

.webp .elementWithBackgroundImage{
  background-image: url("image.webp");
}

用于将图像 link 作为道具传递(在 Vue2 应用程序或任何其他前端框架内):

document.querySelector("html").classList[0] === 'webp' ? this.webpEnabled = true : this.webpEnabled = false;
this.webpEnabled ? this.currentImages = this.imagesWebp : this.currentImages = this.imagesJpeg

<some-component :image="currentImages[0]"></some-component>

如果您正在寻找一个简单的(无 JS)解决方案来解决 .webp 图像无法在 Safari 上显示为 CSS 背景图像的问题,您可以直接使用 CSS背景 属性:

background: url(image-filename.webp) center/contain no-repeat,
            url(image-filename.jpg) center/contain no-repeat;

图像的顺序很奇怪,因为感觉您应该将旧格式 放在 .webp 文件之后。

无论如何,这为 Safari 和其他较小的浏览器提供了备用图像。

编辑

上面的答案有效,但这不是一个好的解决方案,因为浏览器最终只会下载这两个图像。

使用 .webp 跨浏览器的 "real" 答案似乎需要 Modernizr 和使用 JS 的浏览器检测 - 参见此处:

https://css-tricks.com/using-webp-images/#article-header-id-4