Javascript CORS错误取决于图像参数设置顺序

Javascript CORS错误取决于图像参数设置顺序,javascript,image,canvas,cors,Javascript,Image,Canvas,Cors,我正在使用画布显示图像,并使用getImageData()获取该图像特定部分的信息。根据我设置图像参数的顺序,它是否工作 在文档体上使用onload调用该方法。代码如下: function draw() { var canvas = document.getElementById("canvas"); if (canvas.getContext) { var ctx = canvas.getContext("2d"); var img = new Image();

我正在使用画布显示图像,并使用getImageData()获取该图像特定部分的信息。根据我设置图像参数的顺序,它是否工作

在文档体上使用
onload
调用该方法。代码如下:

function draw() {
  var canvas = document.getElementById("canvas");
  if (canvas.getContext) {
    var ctx = canvas.getContext("2d");
    var img = new Image();

    img.src = "url_to_image";
    img.crossOrigin = "anonymous";
    canvas.width = img.width;
    canvas.height = img.height;
    ctx.drawImage( img, 0, 0 );
    var data = document.getElementById('canvas').getContext('2d').getImageData( 310, 320, 1, 1 ).data
  }
}
这会触发以下交叉原点错误:

Cross-origin image load denied by Cross-Origin Resource Sharing policy.
我从中取回映像的服务器配置为将带有映像的
访问控制允许源:
响应头设置回

但是,如果我只是在
image.src
之前设置
img.crossOrigin
,则一切正常:

img.crossOrigin = "anonymous";
img.src = "url_to_image";

这对我来说似乎很奇怪。有人知道发生了什么吗?

。crossOrigin必须先到。src

这是因为.src实际上启动了下载

浏览器必须知道在开始下载时是否允许匿名访问,或者默认情况下不允许跨源访问

现代浏览器(FF、Chrome、Safari、Opera、Android)几乎完全支持跨源共享。Opera的迷你版是唯一主要的不支持浏览器


而且,正如您所发现的,必须将提供数据的服务器配置为发送适当的标头,以便让浏览器知道允许交叉共享。

.crossOrigin必须位于.src之前

这是因为.src实际上启动了下载

浏览器必须知道在开始下载时是否允许匿名访问,或者默认情况下不允许跨源访问

现代浏览器(FF、Chrome、Safari、Opera、Android)几乎完全支持跨源共享。Opera的迷你版是唯一主要的不支持浏览器


而且,正如您所发现的,必须将提供数据的服务器配置为发送适当的标头,以便让浏览器知道允许交叉共享。

.crossOrigin必须位于.src之前

这是因为.src实际上启动了下载

浏览器必须知道在开始下载时是否允许匿名访问,或者默认情况下不允许跨源访问

现代浏览器(FF、Chrome、Safari、Opera、Android)几乎完全支持跨源共享。Opera的迷你版是唯一主要的不支持浏览器


而且,正如您所发现的,必须将提供数据的服务器配置为发送适当的标头,以便让浏览器知道允许交叉共享。

.crossOrigin必须位于.src之前

这是因为.src实际上启动了下载

浏览器必须知道在开始下载时是否允许匿名访问,或者默认情况下不允许跨源访问

现代浏览器(FF、Chrome、Safari、Opera、Android)几乎完全支持跨源共享。Opera的迷你版是唯一主要的不支持浏览器

而且,正如您所发现的,传递数据的服务器必须配置为发送适当的头,以便让浏览器知道允许交叉共享