【发布时间】:2021-10-20 04:42:15
【问题描述】:
我有一个这样的 HTML img 元素:
<img src="https://theposterdb.com/api/assets/11949" />
还有一个像这样的 CSS 类:
div {
background-image: url(https://theposterdb.com/api/assets/11949);
}
这两种方法都可以在我的网站上显示图像。但是,当我尝试在 JavaScript 中执行以下操作时:
fetch("https://theposterdb.com/api/assets/11949")
我收到 CORS 错误。为什么?我需要在 JS 中获取图像,因为我想检查它是否已成功加载,否则显示自定义替代元素。
【问题讨论】:
-
因为这就是 CORS 所做的 - 保护资源免遭未经授权的使用 - 它们允许您使用图像,但只能作为图像使用 - 当然,您可以使用 img 标签的 onerror 处理程序来查看如果已加载
-
您可以尝试
img.addEventListener("load", ...)来检查图像是否已加载。 -
一种方法是通过您的服务器发送
fetch- 然后 CORS 不适用 - 并且 - 您可以发出HEAD请求以最小化响应数据量 - 因为您只是想要一个 200 或 404 响应状态来检查资源是否存在——我不明白你打算如何修复 CSS——但我想你知道你在那里做什么 -
@Bravo 我不知道服务器可以区分图像元素的 GET 请求和 fetch 调用的 GET 请求。标题中是否有一些元信息使这成为可能?
-
在你走上这条路之前... CORS周围没有后门 - 唯一的绕过是从您的服务器发出请求...浏览器请求您的服务器,传递要检查的 URL,服务器检查,并返回一个好/坏的指示......这是使用 fetch/xhr 的唯一方法
标签: javascript html css cors