Chrome 上的 crossOrigin 属性干扰了外部图像检索
crossOrigin attribute messing with the external image retrieval on Chrome
我正在使用 HTML Canvas 在我的页面上合成图像。我的 canvas 的元素之一是来自外部域 (Amazon S3) 的图像,我使用 CORS 检索此图像并在图像加载时使用 crossOrigin 属性。
var image = document.createElement('img');
image.setAttribute('crossOrigin', '');
image.onload = function() {
CANVASCONTEXT.drawImage(image, 0, 0, 200, 200)
}
image.setAttribute('src', MYEXTERNALURL);
并获取图像数据:
MYCANVAS.toDataURL()
在 Firefox 上一切正常。
在 Chrome 我无法从外部来源检索图像并收到错误消息:
No 'Access-Control-Allow-Origin' header is present on the requested
resource
好像没有设置 CORS 配置。
如果我删除 crossOrigin 属性,我可以合成我的图像,但我不能使用 toDataURL() 来获取图像数据(这是有道理的)。
你有任何指示,解决这个问题的方法吗?
谢谢
Chrome 阻止跨源查询。
您可以使用 htaccess 或主机设置修复它。
Apache/Htaccess:
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
Nginx:
location / {
add_header Access-Control-Allow-Origin *;
}
您可以用德语阅读on my blog。
哇,我知道问题出在哪里了。
我两次请求外部资源(第一次检查图像是否存在,第二次向 canvas 请求)。
在第二次调用时,图像被浏览器缓存。所以我猜 canvas 由于图像的来源(浏览器的缓存)而无法绘制图像。
我不知道这是否有意义,但我知道我会重写这部分代码!
我正在使用 HTML Canvas 在我的页面上合成图像。我的 canvas 的元素之一是来自外部域 (Amazon S3) 的图像,我使用 CORS 检索此图像并在图像加载时使用 crossOrigin 属性。
var image = document.createElement('img');
image.setAttribute('crossOrigin', '');
image.onload = function() {
CANVASCONTEXT.drawImage(image, 0, 0, 200, 200)
}
image.setAttribute('src', MYEXTERNALURL);
并获取图像数据:
MYCANVAS.toDataURL()
在 Firefox 上一切正常。
在 Chrome 我无法从外部来源检索图像并收到错误消息:
No 'Access-Control-Allow-Origin' header is present on the requested resource
好像没有设置 CORS 配置。
如果我删除 crossOrigin 属性,我可以合成我的图像,但我不能使用 toDataURL() 来获取图像数据(这是有道理的)。
你有任何指示,解决这个问题的方法吗?
谢谢
Chrome 阻止跨源查询。
您可以使用 htaccess 或主机设置修复它。
Apache/Htaccess:
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
Nginx:
location / {
add_header Access-Control-Allow-Origin *;
}
您可以用德语阅读on my blog。
哇,我知道问题出在哪里了。
我两次请求外部资源(第一次检查图像是否存在,第二次向 canvas 请求)。 在第二次调用时,图像被浏览器缓存。所以我猜 canvas 由于图像的来源(浏览器的缓存)而无法绘制图像。
我不知道这是否有意义,但我知道我会重写这部分代码!