Ответ 1
Я думаю, что ответ "нет", как в этом сообщении: как мне получить доступ к XHR responseBody (для двоичных данных) из Javascript в IE?
(или: "использовать VBScript для помощи" )
Прежде всего, я знаю об этом вопросе:
и, в частности, лучший ответ, http://emilsblog.lerch.org/2009/07/javascript-hacks-using-xhr-to-load.html.
Таким образом, доступ к двоичным данным из Javascript с помощью Firefox (и более поздних версий Chrome, которые, похоже, тоже работают, не знают о Opera). Все идет нормально. Но я все еще надеюсь найти способ доступа к двоичным данным с современным IE (в идеале IE 6, но, по крайней мере, IE 7+), без использования VB. Было упомянуто, что XHR.messageBody не будет работать (если он содержит нулевые байты), но мне было интересно, может ли это быть разрешено с более новыми версиями; или могут быть альтернативные настройки, которые позволяли бы простой доступ к двоичным данным.
Конкретный вариант использования для меня - это доступ к данным, возвращаемым веб-службой, которая кодируется с использованием формата передачи двоичных данных (включая комбинации байтов, которые не являются законными в кодировке UTF-8).
Я думаю, что ответ "нет", как в этом сообщении: как мне получить доступ к XHR responseBody (для двоичных данных) из Javascript в IE?
(или: "использовать VBScript для помощи" )
Хорошо, я нашел несколько интересных примеров, хотя пока не совсем хорошее решение.
Одна очевидная вещь, которую я пробовал, - это играть с кодировками. Есть две очевидные вещи, которые действительно должны работать:
Однако: похоже, преобразование для латинского-1 может быть обратимым, и если да, я уверен, что я мог бы использовать его в конце концов. Все мутации составляют от 1 байта (0x00 - 0xFF) до более крупных байтов, и нет никаких двусмысленных сопоставлений, по крайней мере, для Firefox. Если это верно для других браузеров, можно будет отображать значения обратно и удалять негативные эффекты автоматического транскодирования. И это будет работать для нескольких браузеров, включая IE (с предостережением о необходимости чего-то особенного для обработки нулевых значений).
Наконец, некоторые полезные ссылки для конверсий типов данных:
Это возможно с помощью IE10, используя responseType = arraybuffer или blob. Вам нужно было подождать несколько лет...
http://msdn.microsoft.com/en-us/library/ie/br212474%28v=vs.94%29.aspx
http://msdn.microsoft.com/en-us/library/ie/hh673569%28v=vs.85%29.aspx
Вы можете использовать объект JScript VBArray, чтобы получить эти байты в IE (без использования VBScript):
var data = new VBArray(xhr.responseBody).toArray();