Подтвердить что ты не робот

Доступ к двоичным данным из Javascript, Ajax, IE: может ли пароль быть прочитанным из Javascript (а не VB)?

Прежде всего, я знаю об этом вопросе:

и, в частности, лучший ответ, 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).

4b9b3361

Ответ 2

Хорошо, я нашел несколько интересных примеров, хотя пока не совсем хорошее решение.

Одна очевидная вещь, которую я пробовал, - это играть с кодировками. Есть две очевидные вещи, которые действительно должны работать:

  • Latin-1 (также известный как ISO-8859-1): это однобайтная кодировка, сопоставляющая один-на-один с Unicode. Поэтому теоретически этого должно быть достаточно, чтобы объявить тип контента "text/plain; charset = ISO-8859-1" и получить символ за байт. Увы, из-за идиотской логики браузеров (и даже более идиотского мандата по HTML 5!) Происходит некоторое перекодирование, которое странным образом изменяет диапазон управляющих символов (коды 128 - 159). По-видимому, это связано с обязательным предположением, что кодирование действительно является Windows-1252 (почему? По каким-то глупым причинам.. но это то, что есть)
  • UCS-2 представляет собой 2-байтовое кодирование с фиксированной длиной, которое предшествовало UTF-17; и просто разбивает 16-разрядные коды символов на 2 байта. Увы, браузеры, похоже, не поддерживают его.
  • UTF-16 может работать теоретически, но существует проблема суррогатных парных символов (0xD800 - 0xDFFF), которые зарезервированы. И если включены пары байтов, которые кодируют эти символы, происходит повреждение.

Однако: похоже, преобразование для латинского-1 может быть обратимым, и если да, я уверен, что я мог бы использовать его в конце концов. Все мутации составляют от 1 байта (0x00 - 0xFF) до более крупных байтов, и нет никаких двусмысленных сопоставлений, по крайней мере, для Firefox. Если это верно для других браузеров, можно будет отображать значения обратно и удалять негативные эффекты автоматического транскодирования. И это будет работать для нескольких браузеров, включая IE (с предостережением о необходимости чего-то особенного для обработки нулевых значений).

Наконец, некоторые полезные ссылки для конверсий типов данных:

Ответ 4

Вы можете использовать объект JScript VBArray, чтобы получить эти байты в IE (без использования VBScript):

var data = new VBArray(xhr.responseBody).toArray();