我正在尝试在JavaScript中流式传输大量二进制数据,并在下载完成之前访问数据。在大多数主流浏览器中,我可以使用 charset=x-user-defined
技巧,在 progress 事件期间手动获取原始字节数据。
然而,在Internet Explorer中,这个技巧不起作用,我只能使用 VBArray(responseBody).toArray()
方法,这是非常慢的。不过,由于我只需要支持IE 11及更高版本,我应该能够利用IE的MSStream
逐步获取数据。以下代码在IE 11桌面版上可以正常工作,但在运行IE 11移动版的Lumia Windows Phone 8.1设备上却不能:
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'ms-stream';
xhr.onreadystatechange = function () {
if (xhr.readyState === 3 && xhr.status === 200) {
// reader is an MSStreamReader object
reader.readAsArrayBuffer(xhr.response);
}
};
xhr.send();
在Windows Phone设备上,readyState
永远不会超过1,status
为0,表示发生了未知错误,即使没有实际错误被抛出。
有没有人知道为什么这对我不起作用,或者可能有解决方法?
url
请求的是什么类型的资源?该资源是否内置了浏览器检测功能?如果是这样,从我进行过的一些简单的谷歌搜索中看来,Windows 8+ 和 IE10/11 Mobile 似乎与浏览器检测脚本不兼容。 - Shotgun Ninja