如何通过Safari中的JavaScript将webp图像加载到新的Image()中

问题描述 投票:0回答:1

我刚刚切换到webp图像,并注意到它们不起作用。我正在使用a lazy loading plugin处理加载这些图像。这就是问题所在。如果可能,我希望能够提交拉取请求以解决此问题。

这里是一个示例,演示了两种不同图像格式的成功和失败:

https://codepen.io/corylogan/pen/OJJMERo?editors=1010

这是后代的代码

const loadImageAsync = (item) => {
  let image = new Image()
  console.log(item)
  image.src = item
  image.onload = function () {
    console.log('successful onload')
  }

  image.onerror = function (e) {
    console.log('got an error')
    console.log(e)
  }
}

loadImageAsync('https://upload.wikimedia.org/wikipedia/commons/a/a5/Red_Kitten_01.jpg')
loadImageAsync('https://s3.amazonaws.com/road-trip-blog/1c9fe9f0-4e9e-3604-9b77-e35d7ecfc40f-w2100.webp')

在Chrome中,两个图像都将报告成功。在iOS上的Safari和Mobile Chrome中,webp失败,并显示以下错误:{"isTrusted":true}

该错误不是很有帮助。但是当我查看从Chrome和Safari发送的对应请求的标头时,我可能会有一个线索:

Safari

Request
GET /road-trip-blog/1c9fe9f0-4e9e-3604-9b77-e35d7ecfc40f-w2100.webp HTTP/1.1
Accept: image/png,image/svg+xml,image/*;q=0.8,video/*;q=0.8,*/*;q=0.5
Pragma: no-cache
Referer: https://cdpn.io/
Cache-Control: no-cache
Host: s3.amazonaws.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.2 Safari/605.1.15
Accept-Language: en-us
Accept-Encoding: br, gzip, deflate
Connection: keep-alive

Chrome

Provisional headers are shown
Referer: https://cdpn.io/
Sec-Fetch-Mode: no-cors
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36

猜测

可能与Chrome中的Sec-Fetch-Mode或Safari中的Accept标头有关?

我现在想不出太多了。有什么想法吗?

javascript safari mobile-safari
1个回答
0
投票

我觉得很傻:iOS或Safari不支持Webp。只是行不通。https://caniuse.com/#feat=webp

© www.soinside.com 2019 - 2024. All rights reserved.