当我尝试在响应头中获取具有Access-Control-Allow-Origin:*的图像的图像数据时,为什么会出现exception18?
当我尝试通过方法getImageData获取图像的像素时,我遇到了这个错误
“无法从canvas获取图像数据,因为canvas已被跨源数据污染。未捕获错误:SecurityError:DOM Exception 18”
图像在标题响应中具有Access-Control-Allow-Origin:* 。 所以,我不明白为什么我得到这个错误。 我该怎么做才能解决这个问题?
我试图将属性crossOrigin添加到图像中,但这在Safari中不起作用。 我正在处理的代码如下。
Example var img = new Image(); img.onload = function() { var ctx = $('#cnv')[0].getContext('2d'); ctx.drawImage(this, 0, 0); var originalImageData = ctx.getImageData(0, 0, 300, 300); // Exception 18 }; img.src = 'http://api.thumbr.it/1f86404a001828912f295a74b8a4d337/D-lvXHFIHpY/api.thumbr.it/static/ladies-800.png/400x400c-ebrown-eframe1/thumb.jpg'; $('body').append(img); Example
在客户端,请务必在设置crossOrigin
之前设置crossOrigin
标志
img.crossOrigin='anonymous'
这是您的代码,其中crossorigin访问权限设置为匿名:
Example Example
我找到了另一种通过XMLHttpRequest解决这个问题的方法。 此解决方案适用于Chrome,Safari,Firefox和Opera,但不适用于IE 。 有关更多信息,请访问此页面http://jsperf.com/encoding-xhr-image-data/12 。
Example Example