img标签的HTML crossorigin属性

扎拉杰贝格

我试图了解如何对img标签使用crossorigin属性。我找不到一个很好的例子(我发现的有关启用了CORS的图像的解释是用JavaScript代码解释的,因此,我看不到带有img标签的crossorigin属性。

我有一个猜测,如果我理解错误,请更正我的错误。

首先,可以编写以下代码片段以在画布上绘制图像:

<canvas id="canvas" width=400 height=400></canvas>
<br><br>
<img id="image" src="http://...." alt="" width="400" height="400">
<script>
function draw() {
    var canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");
    var img = new Image();
    img.crossOrigin = "Anonymous";
    img.src = document.getElementById("image").value;
    context.drawImage(img, 40, 40);
}
</script>

下面的代码与上面的代码等效吗?它不包含“ img.crossOrigin”,但在img标签中具有crossorigin属性。

<canvas id="canvas" width=400 height=400></canvas>
<br><br>
<img id="image" crossorigin="anonymous"src="http://...." alt="" width="400" height="400">
<script>
function draw() {
    var canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");
    var img = new Image();
    img.src = document.getElementById("image").value;
    context.drawImage(img, 40, 40);
}
</script>

说实话,我无法进行实验,因为我不知道哪个站点允许将其图像用作CORS。

我的猜测是,如果一个站点允许在匿名情况下完成CORS请求,则可以在画布上使用其图像,您可以在画布上绘制它;如果没有,即使请求是匿名完成的,也无法在画布上绘制它(我是不知道我是否在这里)。因此,以上两个示例都必须匿名请求CORS。

您能否说一下它们是否都相同?如果没有,您能否解释一下原因,并给我一个使用带有img标签的crossorigin属性的示例?

由于您使用#image元素作为图像的源,因此代码的两个版本大致相同。

但...

没有crossorigin="anonymous"img元素的版本可能仍会产生跨域冲突。

这是因为图像最初是在没有将跨域标志设置为onymous的情况下加载到img元素中

javascript代码可能会使用来自img元素的图像的缓存版本,而不是尝试从http://重新加载它。

这意味着缓存的图像数据仍然会污染画布,因为其中包含跨域内容。

顺便说一句,代码中的语法错误:

// Not:  img.src = document.getElementById("image").value;

img.src = document.getElementById("image").src;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章