Могу ли я правильно читать двоичные данные через XDomainRequest?

Редактировать: Принимая во внимание предложение Dennmat, мне удалось упростить сценарий получения изображения до нескольких строк, используя Image():

window.onload = function(){
    var img;
    capture_canvas          = document.createElement('canvas');
    capture_canvas.width    = 1000;
    capture_canvas.height   = 1000;
    document.documentElement.appendChild(capture_canvas);
    img = new Image();
    img.crossOrigin = "Anonymous";        
    img.src = "http://www.shangalulu.com/get_resource_no_64.php?url=http://www.shangalulu.com/users/1196739508/post/41-1330377498/41-1330377498_thumb.jpg";
    img.onload = function() {
        var context, canvas_img;
        context = capture_canvas.getContext('2d');
        context.drawImage(img, 0, 0, 255, 255);
        canvas_img = context.getImageData(0, 0, capture_canvas.width, capture_canvas.height);
    }
}

Хотя это работает для Chrome и Firefox, это не работает для IE9. Решение, упомянутое в следующей ссылке, похоже, не применимо к этой ситуации.Неперехваченная ошибка: SECURITY_ERR: Исключение DOM 18 при попытке установить файл cookie

Поддерживается ли функция cors в Image() в IE9?


Я столкнулся с небольшой проблемой проблема.

http://www.shangalulu.com/get_resource_no_64.php?url=http://www.shangalulu.com/resources/images/sample/sample.png

Вышеприведенное изображение на самом деле представляет собой файл, содержащий стандартный заголовок png, за которым следуют 255 байтов от 255 до 0 (дважды). Идея заключалась в том, чтобы посмотреть, как Internet Explorer 9 обрабатывает получение двоичных данных через запрос AJAX.

Итак, вот моя проблема: я заметил, что когда я получаю от клиента байт, превышающий 127, значение по умолчанию равно 253. Есть ли способ заставить IE читать расширенные байты с правильными значениями? ?

Несколько вещей, на которые следует обратить внимание:

1) Мы не используем какой-либо фреймворк javascript. Это требование, чтобы мы делали это только с голыми костями javascript.

2) Цель этого эксперимента — сделать чистый способ получить изображение, чтобы я мог разместить его на холсте, не испортив его. Иногда эти изображения поступают с нашего внешнего сервера изображений, в других случаях они поступают с другого хоста, который мы не можем контролировать.

Ниже прикреплен мой тестовый скрипт:

var request;
window.onload = function(){
    request = new XMLHttpRequest();
    if (window.XDomainRequest) {
        request = new XDomainRequest();
    }
    request.open('GET', 
        "http://www.shangalulu.com/get_resource_no_64.php?url=
         http://www.shangalulu.com/resources/images/sample/sample.png", true);
    request.onload  = function()
    {
        var binary, i, response;
        response = this.responseText;
        binary = "";
        if (this.contentType)
        {
            document.documentElement.appendChild(
                document.createTextNode(this.contentType));
            document.documentElement.appendChild(document.createElement('br'));
        }
        for( i=0; i < response.length; i++) {
            binary = "Line " + (i) + " --> " + ((response.charCodeAt(i)) & 0xff);
            document.documentElement.appendChild(document.createTextNode(binary));
            document.documentElement.appendChild(document.createElement('br'));
        }
    };
    request.send();
}

5
задан Community 23 May 2017 в 11:55
поделиться