我有一个HTML画布(使用KineticJS,但是画布狂热者仍然可以插入)从另一个域加载图像,将其放置在画布上并叠加一些其他信息以生成最终图像。当我尝试使用canvas.toDataURL()输出文件时,收到消息“操作不安全。”,显然是由于跨域限制。
我想知道是否有人知道解决此错误的任何方法(最好是跨浏览器兼容)。我当时想解决方案是将画布复制到另一个画布,有点像截图,但是我找不到任何避免这种错误的方法,因为我认为它会将所有画布属性与它。
有人有什么想法吗?
最佳答案
如果图像来自您无法控制的域,则说明您受CORS限制。
如果您有权配置自己的服务器,则可以通过设置以下标题来启用跨域共享(在执行此操作时,请阅读有关服务器安全性的更多信息):
Access-Control-Allow-Origin: <origin> | *
另外,如果将图像托管在启用了CORS的网站(例如www.dropbox.com)上,则可以获取图像而不会出现以下安全错误:
var image1=new Image();
image1.onload=function(){
context.drawImage(image1,0,0);
}
image1.crossOrigin="anonymous";
image1.src="https://dl.dropboxusercontent.com/u/99999999/yourCORSenabledPic.jpg";