我正在加载来自不同域的服务器的图像。这些图像是启用cors的(它们有这个标题:Access-Control-Allow-Origin: *
)。在现代浏览器中,使用image.crossOrigin = ''
,我可以安全地将它们绘制到<canvas>
。
我也希望能够做同样的Internet Explorer 9。IE9在图像上不支持crossOrigin
。对于使用Access-Control-Allow-Origin
头的跨域请求,它确实有XDomainRequest
。
是否有可能通过XDomainRequest
加载PNG并将其绘制到画布上?
在IE中使用XDomainRequest下载图像的复杂性
IE只允许XdomainRequest处理纯文本数据(ARGH!!): http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
IE还将使用其FindMimeFromData
嗅探所有传入数据。因此,即使去掉url的类型前缀(data:image/png;base64),这个嗅探器也会意识到base64文本实际上是一个图像,并相应地处理它:http://msdn.microsoft.com/en-us/library/ms775147(v=vs.85).aspx
一种可能的尝试是重新编码base64文本以混淆嗅探器。
MS显然意识到他们的CORS策略过于严格,并计划在他们的webAPI中添加扩展的CORS支持:http://channel9.msdn.com/Shows/Web+Camps+TV/ASPNET-Web-API-and-CORS-Support
否则,你就只能使用当前的解决方案,从你自己的web服务器上反弹图像,这样它们就不再是x域了