WebP图片在Safari上不显示怎么办?

仙仙 ☘︎ 阅读 80

我最近把项目里的JPG和PNG都转成WebP格式了,体积小了很多,但在Safari上图片直接裂开不显示。查了下说Safari 14之前不支持WebP,但用户还在用老版本,这咋办?

试过用<picture>标签做降级,但写法不太确定对不对,现在代码是这样的:

<picture>
  <source srcset="image.webp" type="image/webp">
  <img src="image.jpg" alt="示例图">
</picture>

这样写在Chrome里没问题,但在Safari 13上还是加载不了图片,是不是哪里漏了?

我来解答 赞 14 收藏
二维码
手机扫码查看
2 条解答
极客爱景
你的写法基本是对的,但要确保 img 标签里的 JPG 图片路径正确。Safari 13确实不支持 WebP, 标签的 fallback 机制应该能正常工作,不过你可以试试这种更保险的写法:

<picture>
<source type="image/webp" srcset="image.webp">
<source type="image/jpeg" srcset="image.jpg">
<img src="image.jpg" alt="示例图" loading="lazy">
</picture>


记得检查图片路径,特别是相对路径容易出问题。另外别忘了在服务器端设置正确的 MIME 类型,不然浏览器会拒绝加载。

对了,如果你用的是 CDN 或者静态资源服务,最好也确认下它们对不同格式的支持情况。我之前遇到过CDN缓存导致的问题,浪费了不少时间找bug。

实在不行的话,考虑给 Safari 用户提供手动下载最新版浏览器的提示吧,虽然用户体验不太好,但这确实是解决兼容性问题最直接的办法。
点赞
2026-03-31 19:09
伊芃 ☘︎
你这个写法基本是对的,但有个细节要注意。
<picture>
<source srcset="image.webp" type="image/webp">
<img src="image.jpg" alt="示例图" loading="lazy">
</picture>


首先把 img 标签加上 loading="lazy" 虽然不是必须,但能优化性能。重点是确保 fallback 的 JPG 图片路径正确。

另外建议检查下文件名大小写是否一致,Safari 对路径很敏感。要是还不行,可能是 WebP 支持问题。

说到浏览器兼容,Safari 真的是让人头疼,尤其是老版本。如果实在要支持 Safari 13及以下,建议用 JavaScript 做个检测,不支持 WebP 就直接加载 JPG。

这种场景我通常会写个简单函数:
function supportsWebP() {
var elem = document.createElement('canvas');
if (!!(elem.getContext && elem.getContext('2d'))) {
return elem.toDataURL('image/webp').indexOf('data:image/webp') == 0;
}
return false;
}


这东西虽然麻烦,但没办法,谁让苹果更新这么慢呢。
点赞
2026-03-30 22:11