我知道以前经常有人问这个问题,但是在尝试解决这个问题 3 天后,我显然需要帮助。
我有一段时间有问题了。我一直在尝试做这样的事情(这是一个简化的代码):
var media = Array();
$(document).ready(function(){
img = new Image();
img.crossOrigin = "*";
img.src = "http://domain.com/pics/picture.svg";
img.width = 200;
img.height = 300;
img.onload = function(){
media['test'] = img;
///var layer = img;
$.jCanvas({
fromCenter: false
});
$("#collider").drawImage({
source: media['test'],
width: 200,
height: 300,
x: 0, y: 0,
click: function(layer){
alert(layer.eventX);
}
});
var pixelData = document.getElementById("collider").getContext('2d').getImageData(50, 50, 20, 20).data;
console.log(pixelData);//*/
}
});
问题是画布被污染了。因此,我无法获得任何像素数据。
我尝试在 .htaccess 中使用以下代码设置访问控制原始标头:
# with AJAX withCredentials=false (cookies NOT sent)
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, PATCH, DELETE"
Header always set Access-Control-Allow-Headers "X-Accept-Charset,X-Accept,Content-Type"
# with AJAX withCredentials=true (cookies sent, SSL allowed...)
SetEnvIfNoCase ORIGIN (.*) ORIGIN=$1
Header always set Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, PATCH, DELETE"
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Credentials "true"
Header always set Access-Control-Allow-Headers "X-Accept-Charset,X-Accept,Content-Type"
当我在浏览图像 URL 时检查浏览器中的标题时,它们似乎正在工作(所有标题都按应有的方式发送)。但是当它们以某种方式通过 javascript 加载时,它们不会(在浏览器中检查时根本没有发送标头),因此画布被污染了
我的问题: 1) 为什么我的 .htaccess 文件不允许跨组织共享数据?2) 为什么我的 html、javascript 和图像文件都托管在同一个域上,所以我什至会遇到跨域数据问题?
附加信息:服务器:Ubunthu LTS 12.04,Apache2
编辑 我试图将图片.svg 更改为 .jpg 图片,现在一切正常,所以显然问题似乎来自包含的 .svg 文件。
任何知道如何使用 .svg 文件执行此操作的人?