我有一个使用XMLHttpRequest下载二进制资源的网页.
在Firefox和Gecko中,我可以使用responseText来获取字节,即使字节流包含二进制零.我可能需要强制使用mimetype overrideMimeType()来实现这一点.但是,在IE中,responseText不起作用,因为它似乎终止于第一个零.如果读取100,000个字节,而字节7是二进制零,则只能访问7个字节.IE的XMLHttpRequest公开了一个responseBody访问字节的属性.我已经看到一些帖子暗示直接从Javascript以任何有意义的方式访问这个属性是不可能的.这听起来很疯狂.
xhr.responseBody 是从VBScript访问,因此明显的解决方法是在VBScript在网页中定义的方法,然后从JavaScript调用该方法.有关一个示例,请参阅jsdap. 编辑:不要使用这个VBScript !!
var IE_HACK = (/msie/i.test(navigator.userAgent) &&
!/opera/i.test(navigator.userAgent));
// no no no! Don't do this!
if (IE_HACK) document.write('<script type="text/vbscript">\n\
Function BinaryToArray(Binary)\n\
Dim i\n\
ReDim byteArray(LenB(Binary))\n\
For i = 1 To LenB(Binary)\n\
byteArray(i-1) = AscB(MidB(Binary, i, 1))\n\
Next\n\
BinaryToArray = byteArray\n\
End Function\n\
</script>');
var xml = (window.XMLHttpRequest)
? new XMLHttpRequest() // Mozilla/Safari/IE7+
: (window.ActiveXObject)
? new ActiveXObject("MSXML2.XMLHTTP") // IE6
: null; // Commodore 64?
xml.open("GET", url, true); …Run Code Online (Sandbox Code Playgroud) 我的印象是Internet Explorer 10完全支持CORS,但现在我不确定.
我们有一个JS/HTML5应用程序,它使用多个域,并读取图像数据.我们在JS中从另一个域加载图像,imageDraw()将图像加载到画布,然后在画布上使用getImageData.(我们不使用跨域XMLHttpRequests).为此,我们必须在服务于图像的服务器上设置响应标头:
access-control-allow-origin: *
access-control-allow-credentials: true
Run Code Online (Sandbox Code Playgroud)
并在加载之前在JS中的图像对象上设置它:
image.crossOrigin = 'Anonymous'; //Also tried lowercase
这适用于所有新浏览器,除了IE10,当我们尝试读取数据时会抛出安全错误.
SCRIPT5022: SecurityError
Run Code Online (Sandbox Code Playgroud)
有没有什么需要做的IE10来处理这些跨域图像不被污染?
更新:
我注意到前一个问题的答案. 有趣的是,这个JSFiddle也不能用于IE10 - 任何人都可以确认这在IE10中不起作用吗?