是否可以将 image.crossOrigin 标记为 "anonymous",即使它不是?

Is it okay to mark image.crossOrigin as "anonymous" even when it is not?

当对具有 canvas api 的图像使用交叉原点 urls 时,如果图像是交叉原点,我会得到一个受污染的 canvas 异常。 MDN Allowing cross-origin use of images and canvas.

更改 crossOrigin="anonymous" 解决了这个问题;但是,总是这样做可以吗?或者我应该先检查 url 以确保它确实是 crossOrigin,然后再将其设置为匿名?

例如

function isCrossOriginURL(url) {
  const { location } = window;
  const parts = url.match(/^(\w+:)\/\/([^:/?#]*):?(\d*)/i);

  return (
    parts !== null &&
    (parts[1] !== location.protocol ||
      parts[2] !== location.hostname ||
      parts[3] !== location.port)
  );
}

console.log(isCrossOriginURL("https://stacksnippets.net"))
console.log(isCrossOriginURL("https://google.com"))

允许对同源请求设置crossorigin。在一般情况下,我不建议这样做,因为:

  • 没用
  • 它可能会产生误导,因为凭据 无论如何都包含在内

但这样做不会破坏您的代码。

总是设置crossorigin=anonymous是不行的。

crossorigin 属性声明您要对图像执行某些操作,需要使用 CORS 获得许可。

如果服务器未使用 CORS 授予权限,那么您将无法对图像执行通常不需要权限的操作……例如显示完全没有图像。

<img src="https://placem.at/places?h=100&w=100" alt="No CORS needed">

<img src="https://placem.at/places?h=100&w=100" crossorigin=anonymous alt="Requires CORS">